два условия для предложения where в SQL

#php #mysql #sql #pdo

#php #mysql #sql #pdo

Вопрос:

Я хочу выполнить sql-запрос с моим php-кодом, но это неправильно, и я не знаю, в чем моя проблема!

 $end_type = $executed[end_type];
$start_type = $executed[start_type];
$sql = "SELECT * FROM `wants` WHERE ((`car`=? AND $start_type=? AND $end_type=?) OR (`car`=? AND $start_type=? AND $end_type='all'))";
$query = $con->prepare($sql);
$query->bindValue(1, $executed[car]);
$query->bindValue(2, $executed[start_place]);
$query->bindValue(3, $executed[end_place]);
$query->execute();
$results = $query->fetchall();
sendmsg($user_id, $results);
 

sendmsg это моя функция отправителя массажа, и она не возвращает никакого массива, даже пустого массива!
почему? что в моем решении?

Комментарии:

1. есть ошибки? используйте $con->error для получения ошибки и повторите ее.

2. Ваш код в его текущей форме не сохраняет и даже не выводит значение, возвращаемое sendmsg() . Достигает ли выполнение этой функции?

Ответ №1:

Основная проблема здесь, по-видимому, заключается в том, что у вас есть пять ? заполнителей в вашем подготовленном операторе, но они связывают только три значения. Возможно, есть какой-то способ переработать значения привязки в PHP, но в этом случае я бы перефразировал ваш запрос следующим образом:

 SELECT *
FROM wants
WHERE car = ? AND start_type = ? AND end_type IN (?, 'all');
 

Обновленный код PHP:

 $sql = "SELECT * FROM wants WHERE car = ? AND start_type = ? AND end_type IN (?, 'all')";
$query = $con->prepare($sql);
$query->bindValue(1, $executed[car]);
$query->bindValue(2, $executed[start_place]);
$query->bindValue(3, $executed[end_place]);
$query->execute();
$results = $query->fetchall();