У меня есть простой SQL запрос на выборку (по аналогии ниже), который возвращает нулевой результат при использовании заполнителей:Mysql заполнителем выберите запрос возвращения нулевых строк
$sql='SELECT * FROM table
WHERE column1=?
AND column2=?;';
$sth = $dbh->prepare($sql);
$sth->execute(array(1,2));
Однако, когда я жёстко SQL, я получаю результаты:
$sql='SELECT * FROM table
WHERE column1=1
AND column2=2;';
$sth = $dbh->prepare($sql);
$sth->execute();
Может ли кто-нибудь объяснить, почему мои заполнители не работают?
EDIT Подготовить заявление успешно. Вот полный запрос:
$sql='SELECT * FROM calendar
LEFT JOIN class_schedule
ON calendar.week=class_schedule.week
AND calendar.class_day=class_schedule.class_day
AND calendar.class_time=class_schedule.class_time
LEFT JOIN class_enrolledIn
ON class_enrolledIn.class=class_schedule.class
LEFT JOIN users
ON class_enrolledIn.u_id=users.id
WHERE calendar.week=?
AND calendar.class_day=?
AND u_id IS NOT NULL;';
Вы уверены, что 'prepare()' преуспевает? См. [Как сжать сообщение об ошибке из PDO] (http://stackoverflow.com/questions/3726505/how-to-squeeze-error-message-out-of-pdo) и убедитесь, что вы установили PDO вверх для того чтобы бросить полезные ошибки вместо ошибки молча (по умолчанию). Каковы ваши настоящие имена столбцов? Я предполагаю, что не 'column1, column2'. Отправьте свой реальный запрос, поскольку это может иметь значение ... –
Я проверил заявление о подготовке, и он успешно проходит через многочисленные тесты. Я также попытался окружить исполняемый элемент, если (! $ Sth-> execute (..)), и он также преуспевает. – thegalah
Вы также должны сообщить нам, как он терпит неудачу. какой результат вы получаете вместо того, что вы ожидаете? Также могут возникнуть ошибки в логике PHP. Нам нужно увидеть больше кода. –