Intereting Posts
Htaccess и учетные записи пользователей Php получит количество дней и часов, оставшихся с даты Определение иерархии классов объекта во время выполнения Разбейте количество (число) в записи и установите их как массив для выбора опций SQL: выбор количества нескольких таблиц Уничтожьте или отмените сеанс, когда пользователь закроет браузер, не нажимая на logout Изменить центр карты в соответствии с вводом автозаполнения с помощью google maps codeigniter library SQLSTATE Доступ запрещен для пользователя «имя пользователя» @ «localhost» с использованием CakePhp Конкатенация строки PHP с помощью «,»? RHEL + PHP: запись файлов вне / var / www / html? выбор всех заказов за последние 30 дней и подсчет количества в день несколько файлов PDF с html2pdf PHP Новая строка не работает рассчитать количество дней недели в диапазоне дат Отправить сообщение с помощью экземпляра Amazon EC2

Неверный параметр привязки PHP / MySQL / PDO не работает

У меня возникли проблемы с привязкой нулевого параметра в следующем коде

$nullVariable = NULL; $sql = new PDO('mysql:host=' . $Server, $User, $Password); $sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $statement = $sql->prepare("SELECT * FROM Table WHERE Binary16Column = :uuid"); $statement->bindParam(":uuid", $nullVariable, PDO::PARAM_NULL); $statement->execute(); $results = $statement->fetchAll(PDO::FETCH_ASSOC); 

Переменная результатов будет пустым массивом. Если я не буду использовать параметры и изменить свой запрос на «WHERE Binary16Column IS NULL», он возвращает ожидаемое количество строк. Поэтому проблема заключается в том, как я обрабатываю этот параметр, а не мой SQL-запрос.

Мой код более сложный, чем приведенный выше, и мне нужно иметь возможность использовать переменную параметра, которая может быть нулевой, поэтому проверка наличия нулевой переменной и выполнение другого запроса менее чем идеальны. Технически у меня есть моя собственная функция для установки параметров, вот где я проверяю, является ли содержимое переменной нулевым, и привязывая этот параметр соответствующим образом, поэтому мне не нужно писать ненужное количество запросов. Запрос работает также отлично, если переменная содержит достоверные данные, а тип параметра – PARAM_LOB.

Кто-нибудь знает, что я делаю неправильно? Большое спасибо!

Solutions Collecting From Web of "Неверный параметр привязки PHP / MySQL / PDO не работает"

Читайте о трехзначной логике . NULL не является значением; это маркер отсутствия значения, и поэтому NULL никогда не может быть равным ничему, включая себя.

Тем не менее, существует нулевой безопасный оператор сравнения, также известный как «оператор космического корабля», который считает два нули эквивалентными.

 WHERE Binary16Column <=> :uuid 

… должен делать то, что вы ожидали.

Если вы хотите выбрать запись с Binary16Column это Binary16Column равно null, вам нужно использовать IS NULL в качестве условия, но не = NULL .

 SELECT * FROM Table WHERE Binary16Column IS NULL 

Вам нужно сделать:

 $uuid = /**some value**/; $sql = new PDO('mysql:host=' . $Server, $User, $Password); $sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); if ($uuid === null) { $statement = $sql->prepare("SELECT * FROM Table WHERE Binary16Column IS NULL"); } else { $statement = $sql->prepare("SELECT * FROM Table WHERE Binary16Column = :uuid"); $statement->bindParam(":uuid", $uuid); } $statement->execute(); $results = $statement->fetchAll(PDO::FETCH_ASSOC); 

Я думаю, причина, по которой вы не получаете результат, потому что NULL – это ключевое слово. Из-за того, как MySQL обрабатывает значения NULL, я думаю, вам нужно будет сделать NULL, когда вы выполняете поиск значений NULL. Я провел кучу тестов в своей локальной базе данных, где у меня есть значения NULL. Единственный раз, когда он работал, когда я использовал IS NULL или IS NOT NULL.

Мне жаль, что я не могу больше помочь (или если я просто расскажу вам то, что вы уже знаете), но похоже, что вам придется писать отдельные запросы или, возможно, простую логику, чтобы объединить соответствующую логику WHERE , в зависимости от того, является ли переменная нулевой или нет.