Условия PDO / PHP для числа возвращаемых строк не выполняются - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть следующий код:

<?php
$stmt = $db->prepare("select * from products where `price`=:price and `id`=:id and date => NOW()");
$stmt->bindParam(":price", $_GET['price'], PDO::PARAM_STR);
$stmt->bindParam(":id", $_GET['id'], PDO::PARAM_INT);
if ($stmt->execute() == true){
    if($stmt->rowCount()==1){
        echo "1 row";
    }else{
        echo "more than 1 row";
    }
}else{
    echo "nothing returned";
}
?>

Если в БД есть 1 совпадение, я получаю: 1 строка выведена Если более 1 строки, я все еще получаю: 1 строка выведена и если нет совпадений, я получаю:

PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '=> NOW ()' в строке 1

Пожалуйста, кто-нибудь может помочь с этим

Спасибо

Ps. соединение БД определенно работает!

1 Ответ

0 голосов
/ 19 ноября 2011

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

date => NOW()

должно быть

date >= NOW()


На первый взгляд, я предположил, что это потому, что DATE - зарезервированное слово, которое вы используете в качестве имени столбца без обратных кавычек.Но, в соответствии с документами :

MySQL позволяет использовать некоторые ключевые слова в качестве идентификаторов без кавычек, потому что многие люди ранее использовали их.Примеры приведены в следующем списке:

ДЕЙСТВИЕ
БИТ
ДАТА
...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...