Wybieranie wierszy, w których pole ma wartość null, przy użyciu przygotowanych instrukcji PHP PDO i MySQL
Konwertowałem aplikację, aby używać przygotowanych instrukcji PDO, a nie mysqli, i napotykam na dziwny problem. Mam kilka rekordów w bazie danych, w których oczekuje się, że pole będzie puste. Nie „null” (string) lub „” (pusty ciąg), ale NULL. Moje zapytania buduję dynamicznie, więc w przeszłości, gdy natknąłem się na zmienną null w obiekcie, zbudowałbym takie zapytanie:
WHERE fieldName is null;
I uzyska oczekiwane wyniki, gdy pole będzie zerowe.
Teraz z PDO moje zapytania nie zwracają żadnych wyników i nie otrzymuję żadnych błędów. Po prostu nie zwraca nagrań, których oczekiwałbym. Kiedy powtarzam zbudowane zapytania i uruchamiam je bezpośrednio w MySQL, otrzymuję oczekiwane wyniki, ale w aplikacji nie ma zwróconych wyników.
Niektóre z rzeczy, które próbowałem, obejmują tworzenie zapytań, które wyglądają tak:
WHERE fieldName is null;
lub
WHERE fieldName <=> null;
Wypróbowałem również standardowe przygotowane zestawienie:
WHERE fieldName = :fieldName
a następnie wiążące z tego rodzaju oświadczeniami:
$stmt->bindParam(":$field", $value);
$stmt->bindParam(":$field", $value, PDO::PARAM_NULL);
$stmt->bindParam(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_NULL);
$stmt->bindValue(":$field", null, PDO::PARAM_INT);
Każda pomoc zostanie doceniona. Moja wersja PHP to 5.3.10, a MySQL to 5.5.22. Na marginesie, nadal nie mam jasności co do różnicy między bindParam i bindValue, więc jeśli ma sens dołączenie do odpowiedzi, naprawdę doceniłbym pewne wyjaśnienie na ten temat ...