MySQL, где предложения 0 и 1 неправильно работают

Ситуация

В таблице у меня есть столбцы, настроенные как ENUM('0','1'), У меня есть выбор сборки запроса с PDO, как этот пример

$value = isset($_POST['value']) ? $_POST['value'] : (isset($_GET["value"]) ? $_GET["value"] : null);

$sql = $pdo->prepare("SELECT * FROM tablename WHERE column = :value");
$sql->bindValue(':value', $_POST['value']); // post contains 0 or 1
$sql->execute();

Эта проблема

При печати результатов значение 1 работает нормально. Но при использовании значения 0 отображаются все строки, включая строки со значением 1.

Следующий запрос работает нормально при попытке его в HeidiSQL, но это не с PHP. В чем дело?

SELECT * FROM tablename WHERE column = '0'

Я заметил, что PHP думает $_POST['value'] не устанавливается, когда его значение равно нулю. я использую isset()


Пытаюсь решить проблему

  • Нет эффекта либо при использовании $_GET['value'] и URL, как index.php?value=0

  • Попробовал следующее, не работает

    $ sql-> bindValue (': value', '0'); // сообщение содержит 0 или 1

  • Я изменил тип столбца на TINYINT(1)нет эффекта. При поиске нуля все показывают.

  • Установить PDO bindValue() $data_type в PDO::PARAM_BOOL, не работает

0

Решение

Попробуй это:

$value = empty($_POST['value']) ? '0' : '1' ;

$sql = $pdo->prepare("SELECT * FROM tablename WHERE column = :value");
$sql->bindValue(':value', $value, PDO::PARAM_STR); // post contains 0 or 1
$sql->execute();

Удачи!

0

Другие решения

ENUM — это строковый объект со значением, выбранным из списка разрешенных значений, которые явно перечислены в спецификации столбца во время создания таблицы.

Значение перечисления должно быть строковым литералом в кавычках; это может быть не выражение, даже выражение, которое оценивается как строковое значение.

Значение индекса пустой строки со значением ошибки равно 0. Это означает, что
Вы можете использовать следующую инструкцию SELECT, чтобы найти строки, в которые
неверные значения ENUM были присвоены:

mysql> SELECT * FROM tbl_name WHERE enum_col=0;

Поэтому используйте одинарные кавычки, чтобы считать ноль (0) строкой.

0

По вопросам рекламы [email protected]