PHP MYSQLI подготовил оператор сравнения datetime и GetDate () err

Я открываю соединение с моей базой данных, используя php и mysqli, и делаю несколько запросов, используя подготовленные операторы, где все работает, но в этом запросе, где я пытаюсь выбрать только те поездки, которые есть в будущем, я по непонятным причинам проваливаюсь, как только добавляю сравнение ПОЛУЧИТЬ ()

date_default_timezone_set('America/Denver');

if(!($stmt = $con->prepare("SELECT r.destination, r.startDepartureTime, r.seats, r.priceperseat FROM ride r WHERE r.startZipCode = ? AND r.startDepartureTime > GETDATE()"))) echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;

if(!$stmt->bind_param("i", $userZipCode)) echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;

$stmt->execute();

$stmt->store_result();
$stmt->bind_result($destination,$departure,$seats,$price);

while($stmt->fetch()){
echo "Destination : $destination Departure Time : $departure Seats Available : $seats Price Per Seat : $price <br>";
}

$stmt->close();

Журнал ошибок php сообщает, что в строке оператора prepare

Примечание PHP: Попытка получить свойство не-объекта

и что поэтому в строке bind_param мы получаем

Неустранимая ошибка PHP: вызов функции-члена bind_param () для необъекта

Первоначально я пытался использовать NOW (), но попробовал все решения в этой теме Функция SQL NOW () не работает должным образом и не повезло.

Когда я запускаю оператор без сравнения r.startDepartureTime> GETDATE (), все работает нормально.

И я убедился, что столбец startDepartureTime в моей базе данных имеет тип datetime. Вот пример записи: 2016-05-21 10:24:00, что я удостоверился, что действительно больше, чем текущее время и в том же почтовом индексе, чтобы гарантировать, что я не просто получаю пустой набор.

0

Решение

GETDATE() не является функцией MYSQL, NOW() должно быть то, что вам нужно

Может быть, вы хотите использовать меньше, чем больше, чем в запросе r.startDepartureTime < NOW()

Если подготовка не удалась, вам нужно сделать что-то более позитивное, чем просто сообщить об ошибке. Так что этот вид кода будет работать лучше.

Также, если подготовка не удалась, $stmt установлен в false и, следовательно, используя $stmt->errno и т. д. не будет работать, и фактически будет генерировать еще более запутанные сообщения об ошибках. Так что в этом случае вы должны использовать соединение $con чтобы получить ошибки от

$sql = "SELECT r.destination, r.startDepartureTime,
r.seats, r.priceperseat
FROM ride r
WHERE r.startZipCode = ?
AND r.startDepartureTime < NOW()";

$stmt = $con->prepare($sql);

if($stmt === false) {
echo "Prepare failed: {$con->errno} : {$con->error}";
exit;
}
0

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

Других решений пока нет …

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