#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();