Natknąłem się na problem, którego nie jestem w stanie ogarnąć umysłem.
Wydaje się, że wynik z bazy otrzymany w PHP przez PDO jest inny niż
ten widziany w phpmyadmin. Oto opis tego co widzę:
Informacje:
Baza danych: MySQL 5.0.51a
PHP: PHP 5.2.5
Struktura:
`prezydenci` w bazie `iiirp`
imieinazwisko text utf8_polish_ci
poczatekkadencji mediumint(9)
Zawartość bazy:
imieinazwisko poczatekkadencji
Wojciech Jaruzelski 1989
Lech Wałęsa 1990
Aleksander Kwaśniewski 1995
Aleksander Kwaśniewski 2000
Lech Kaczyński 2005
1) Zapytanie przez phpmyadmin:
SELECT COUNT(*) AS liczba FROM `prezydenci` WHERE 'aleksander-
kwasniewski' =
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(`imieinazwisko`),
'ź', 'z'), 'ż', 'z'), 'ś', 's'), 'ó', 'o'), 'ń', 'n'), 'ł', 'l'), 'ę',
'e'), 'ć', 'c'), 'ą', 'a'), ' ', '-')
zwraca:
liczba
2
OBSERWACJE: Wynik jest zgodny z oczekiwanym.
2) Zapytanie przez PHP:
Kod:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
header('Content-Type: text/html; charset=utf-8');
try {
$PDO = new PDO('mysql:host=localhost;dbname=iiirp', 'root', '');
$PDO-exec('SET CHARSET utf8');
$query = $PDO-prepare("SELECT COUNT(*) AS liczba FROM `prezydenci`
WHERE ':imieinazwisko' =
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(`imieinazwisko`),
'ź', 'z'), 'ż', 'z'), 'ś', 's'), 'ó', 'o'), 'ń', 'n'), 'ł', 'l'), 'ę',
'e'), 'ć', 'c'), 'ą', 'a'), ' ', '-')");
$query-bindValue(':imieinazwisko', $_GET['imieinazwisko']);
$query-execute();
$result = $query-fetch(PDO::FETCH_ASSOC);
echo 'START' . $_GET['imieinazwisko'] . "STOP\n";
print_r($result);
}
catch(PDOException $e) {
echo $e-getMessage();
}
?
Dla '?imieinazwisko=wojciech-jaruzelski' zwraca:
STARTwojciech-jaruzelskiSTOP Array ( [liczba] =0 )
OBSERWACJE: Wynik jest niezgodny z oczekiwanym, ponadto różni się od
otrzymanego za pomocą phpmyadmin.
Jestem tym szczerze zaskoczony. Dlaczego tak się dzieję i jak temu
zaradzić?
Z góry dziękuję za pomoc,
Stanisław Polański