MysQL где $ var И ЕСТЬ NULL

У меня проблемы с обработкой информации из базы данных MySQL, у меня есть этот код:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
$res = $conn->query($sql);
if ($res === TRUE) {
echo "DATA Obtained";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

Но единственное, что я получаю, это ошибка:

Ошибка: ВЫБРАТЬ * ИЗ ОБОЙОК, ГДЕ id_uzivatela = ‘******’ И id_zvierata НЕДЕЙСТВИТЕЛЕН

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать рядом с ‘is null AND id_uzivatela =’ 20170 » в строке 1

0

Решение

В вашем запросе нет проблем … Вы видите ошибку другого запроса.

Из документации возврат $ conn-> query не должен быть строго равен TRUE

Возвращает FALSE при ошибке. Для успешного выбора, шоу, описания или
EXPLAIN-запросы mysqli_query () вернет объект mysqli_result.

Если вы хотите проверить, сработал ли ваш запрос, не проверяйте истинное значение, лучше тестируйте не ложное …

  $sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
$res = $conn->query($sql);
if ($res != FALSE) {
echo "DATA Obtained";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

РЕДАКТИРОВАТЬ:
Я полностью забыл отметить, что, поскольку вы видите ошибку, связанную с другим запросом, вы должны исправить этот запрос! Когда я писал подобные запросы, у меня была одна привычка — писать так:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
$res = $conn->query($sql) or throw new Exception("Error: " . $sql . "<br>" . $conn->error);

Это означает, что make $ res = для значения запроса $ conn->, если оно не равно false. Если оно ложно, выведите исключение с соответствующей информацией.

Если вы сделаете это, вам не нужно будет проверять, хорош ли $ res или нет. Это также очень поможет вам найти, где происходят ошибки.

1

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

Ошибка не в запросе. По крайней мере, не в запросе, размещенном в вопросе.

Ошибка в коде PHP.

SELECT запрос никогда не возвращается TRUE, Он возвращает объект, когда это удается. Либо mysqli_result или PDOStatement, в зависимости от того, какую библиотеку MySQL вы используете.

Ваш запрос успешно выполнен и $res это объект. Это не TRUE, тест $res === TRUE не удается, и код ошибочно запускает else ветка. Затем он сообщает правильный запрос, который он только что успешно выполнил, и сообщение об ошибке последнего неудачного запроса. Это объясняет, почему фрагмент запроса, указанный сервером в сообщении об ошибке, не соответствует выполненному вами запросу.

Правильный способ проверить результат вашего запроса: $res != FALSE, Неважно, если вы используете == или же ===, $res это либо объект (не равно FALSE как бы это ни сравнивалось) или FALSE, Вы также можете просто использовать $res, Это то же самое:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
$res = $conn->query($sql);
if ($res) {
echo "DATA Obtained";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

В зависимости от используемой вами библиотеки MySQL, читайте больше о mysqli::query() и / или PDO::query().

0

SELECT * FROM obojok WHERE id_uzivatela = ‘». $ _ SESSION [‘ uzivatel ‘] [‘ id ‘].»‘ ИЛИ ​​id_zvierata IS NULL

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