Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO-problem z selectem
Forum PHP.pl > Forum > Przedszkole
php_user_slask
Witam.
Przerabiam stare zapytania pod bibliotekę PDO. I mam problem z selectem:

  1. try
  2. {
  3. if($_SERVER['REQUEST_METHOD'] == 'POST')
  4. {
  5. $pdo = new PDO('mysql:host=localhost;dbname=produkty;port=3305', 'root', 'root');
  6. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7.  
  8. $stmt = $pdo -> prepare('SELECT p.imie, p.nazwisko, k.k_model, k.k-firma, m.m_model, m.m_firma FROM
  9. pracownicy p, komputery k, monitory m WHERE p.id_prac=k.id_prac and p.id_prac=m.id_prac and p.nazwisko=:"nazwisko"');
  10. $stmt -> bindValue(':nazwisko', $_POST['nazwisko'], PDO::PARAM_STR); // 2
  11. $stm->execute();
  12.  
  13. '); // 1

I wyskakuje mi błąd typu "nieokreślony index :nazwisko"
Zapytanie jest w porządku- działa w bazie danych, gdy na końcu zamiast p.nazwisko=:"nazwisko"' zrobię p.id_prac=:id_prac i podepnę bindValue- nie ma błędu.
Podejrzewam, iż problem jest z "cudzysłowami" na samym końcu. Jak to rozgryźć?
nospor
Przeczytałeś chociaż jak się binduje?

nie: :"nazwisko"
a: :nazwisko
php_user_slask
Cytat(nospor @ 13.09.2011, 10:29:22 ) *
Przeczytałeś chociaż jak się binduje?

nie: :"nazwisko"
a: :nazwisko

No jasne, że czytałem. I tej wersji też próbowałem- ten sam błąd. O ile pamiętam z SQL'a to przy równa się jeżeli jest typ integer to się pisze np. id_prac=5 a jeżeli jest string
to pisze się nazwisko='kowalski'. I z typem integer zapytanie działa, ze stringiem już nie chce i podejrzewam, że coś nie tak jest właśnie z tymi "apostrofami"
Pozdro
nospor
Cytat
O ile pamiętam z SQL'a to przy równa się jeżeli jest typ integer to się pisze np. id_prac=5 a jeżeli jest string
to pisze się nazwisko='kowalski'
Tak jest w SQL. PDO takie rzeczy robi za Ciebie, dlatego się pytałem, czy oby na pewno przyczytałes o bindowaniu i widzę że jednak tego nie zrobiłeś.
W manualu przy bindowaniu masz podane przykłady, gdzie bindują też teksty i nie używają żadnych apostrofów.

Pokaz lepiej kod po moich poprawkach i jeszcze raz dokładnie błąd jeśli nadal występuje

ps:
Cytat
I wyskakuje mi błąd typu "nieokreślony index :nazwisko"
Jesteś pewien że dokładnie taki błąd dostajesz? A może ten błąd jest po angielsku? Pokaż dokładnie komunikat błędu jaki dostajesz, beż zadnych swoich tłumaczeń
php_user_slask
Cytat(nospor @ 13.09.2011, 11:34:43 ) *
Tak jest w SQL. PDO takie rzeczy robi za Ciebie, dlatego się pytałem, czy oby na pewno przyczytałes o bindowaniu i widzę że jednak tego nie zrobiłeś.
W manualu przy bindowaniu masz podane przykłady, gdzie bindują też teksty i nie używają żadnych apostrofów.

Pokaz lepiej kod po moich poprawkach i jeszcze raz dokładnie błąd jeśli nadal występuje

ps:
Jesteś pewien że dokładnie taki błąd dostajesz? A może ten błąd jest po angielsku? Pokaż dokładnie komunikat błędu jaki dostajesz, beż zadnych swoich tłumaczeń

Błąd po angielsku brzmi (mam dobrą pamięć) undefined index: nazwisko
Bindowałem też tekst bez apostrofów- na samym początku i był ten sam błąd.
Gdy binduję id_prac to problem nie występuje, no ale klient nie będzie wyszukiwał czegoś po indeksie ID lecz woli po nazwisku. oneeyedsmiley02.png
Dobra- wkleję treść zapytania jak i błąd gdy dorwę komputer na któym ten problem występuje.

Pozdro
nospor
To jest błąd php a nie bazy danych i mówi, że odwołujesz się do indeksu o nazwie nazwisko, który nie istnieje
O to:
$_POST['nazwisko']
nie istnieje.



ps: przenoszę
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.