Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Incorrect arguments to mysql_stmt_execute, Działa na windzie, nie chce na linuxie FreeBSD
mxm
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Od jakiegoś czasu szukam na necie rozwiązania w związku z błędem zapytania MySQL, który pojawił się w moim skrypcie. Do połączenia z bazą mysql wykorzystuje bibliotekę PDO. Baza jest postawiona na silniku InnoDB. Mam zapytanie predefiniowane wykonywane poleceniem bindValue.
Przykładowe zapytanie to:
  1. SELECT * FROM tab1
  2. LEFT JOIN tab2
  3. USING (ID)
  4. WHERE tab1.temat LIKE :q OR tab1.temat2 LIKE :q OR tab1.klucz LIKE :q OR tab1.opis LIKE :q

Oczywiście pod ':q' podczepione jest:
  1. bindValue(":q", "%{$q}%", PDO::PARAM_STR)

Teraz najlepsze. Zapytanie na mojej bazie MySQL postawionej na Windowsie (wersja mysql: 5.0.51a-community-nt) wykonywane jest PRAWIDŁOWO. Natomiast to samo zapytanie wykonywane na na linuxie FreeBSD (wersja mysql: 5.0.9-beta) pokazuje błąd:
  1. SQLSTATE[HY000]: General error: 1210 Incorrect arguments to mysql_stmt_execute

Co ciekawe jeśli zmniejszę ilość warunków, czyli zapytanie jest w postaci np.:
  1. SELECT * FROM tab1
  2. LEFT JOIN tab2
  3. USING ( ID )
  4. WHERE tab1.klucz LIKE :q OR tab1.temat2 LIKE :q

wszystko wykonywane jest prawidłowo. Ciekawe prawda?

Jeśli całe zapytanie z wszystkimi warunkami przetworze bezpośrednio w phpmyadminie, ale bez zapytania predefionowanego to też wszystko jest ok.

Tak więc pytanie czym ten błąd jest spowodowany i dlaczego tak ograniczane jest to zapytanie predefiniowane przez bazę?
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Pokaż kod, którym to wywołujesz oraz podaj, z jakiej wersji interpretera korzystasz - instalowana z paczek/z portów/samodzielnie kompilowana?
Go to the top of the page
+Quote Post
mxm
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Jeśli chodzi o PHP na windzie to:
  1. Apache/2.2.8 (win32) PHP/5.3.0

Jeśli chodzi o serwer linuxa to:
  1. Apache/2.0.54 (FreeBSD) mod_scgi/1.2 PHP/5.0.4

Z tym że do PHP z linuxa PDO był kompilowany specjalnie (tamta wersja PHP go nie miała) i dodany do rozszerzeń w php.ini:
- pdo.so (chyba 1.0.3)
- pdo_mysql.so (chyba 1.0.2)
Powyższe pliki pobrane z http://pecl.php.net/get/....

Co do kodu, z którego to wywołuje, to jest problem, ponieważ wszystko jest zabudowane w osobnej klasie (wszystkie instrukcje komunikatujące się z PDO). Ale postaram się napisać jak wyglądałby kod w jednym pliku:
  1. //W zapytaniu są zmienione prawdziwe nazwy, ale to chyba nie ma znaczenia
  2. $sql = "SELECT * FROM tab1
  3. LEFT JOIN tab2
  4. USING (ID)
  5. WHERE tab1.temat LIKE :q OR tab1.temat2 LIKE :q OR tab1.klucz LIKE :q OR tab1.opis LIKE :q ";
  6. $stmt = $this->pdo->prepare($sql);
  7. $stmt->bindValue(":q", "%{$q}%", PDO::PARAM_STR);
  8. $stmt->execute();

Dodam, iż błąd pojawia się na instrukcji "execute", wiec mogę pomarzyć o zobaczeniu jakichkolwiek wyników...
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Możesz używać nowszej wersji niż ten staroć, jakim jest 5.0? W tej chwili najnowszym stabilnym buildem jest 5.3, a z lini 5.2 - 5.2.12 bodajże.

Najpierw uaktualnij, potem pogadamy. ;]
Go to the top of the page
+Quote Post
mxm
post
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Było z tym trochę zachodu i sporo czasu straciłem na naukę FreeBSD, ale zainstalowałem PHP w wersji 5.2.11 wraz z najnowszymi rozszerzeniami, najnowszym PDO i już błąd się nie pojawia. Zupełnie jakbym uruchamiał skrypt u siebie na kompie (IMG:style_emoticons/default/winksmiley.jpg)

Wielki dzięki. Temat do zamknięcia (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:17