MySQL — Query работает на Sequel Pro, но не на моем PHP-скрипте

Этот запрос отлично работает на Sequel Pro:

SELECT t1.* FROM `erapido_messages` t1
LEFT OUTER JOIN `erapido_messages` t2 ON `t1.sender_id` = `t2.sender_id`
AND (`t1.msg_date` < `t2.msg_date` OR `t1.msg_date` = `t2.msg_date` AND `t1.sender_id` != `t2.sender_id`)
WHERE `t2.sender_id` IS NULL AND `t1.sender_id`!= `0` AND `t1.receiver_id`= 28
ORDER BY `t1.msg_date` DESC;

Когда я использую его в своем PHP-скрипте, он возвращает ошибку. Это полный запрос в php:

$query = "SELECT t1.* FROM `erapido_messages` t1
LEFT OUTER JOIN `erapido_messages` t2 ON `t1.sender_id` = `t2.sender_id`
AND (`t1.msg_date` < `t2.msg_date` OR `t1.msg_date` = `t2.msg_date` AND `t1.sender_id` != `t2.sender_id`)
WHERE `t2.sender_id` IS NULL AND `t1.sender_id`!= `0` AND `t1.receiver_id`= ?
ORDER BY `t1.msg_date` DESC";

//$sql is my connection and it works fine on other queries
$statement = $sql->prepare($query);

//bind parameters for markers: s = string, i = integer, d = double,  b = blob
$statement->bind_param('i', $receiver_id);//$receiver_id is defined

//execute query
$statement->execute();

//store the results; allows to count the rows
$statement->store_result();

//bind result variables
$statement->bind_result($id, $receiver_name, $receiver_img, $receiver_email, $sender_id, $sender_name, $sender_email, $sender_img, $subject, $message, $msg_date);

Это ошибка:

Fatal error: Call to a member function bind_param() on boolean in /messages.php on line 53

Я понимаю, что этот оператор может вернуть ‘false’ в случае сбоя запроса:

$statement = $sql->prepare($query);

Тем не менее, я не вижу, что не так в запросе. Любая помощь приветствуется!

Большое спасибо.

0

Решение

Ваш оператор prepare возвращает false из-за неверной строки запроса. Измените ваш запрос, как показано ниже. В настоящее время вы экранируете имена столбцов, потому что они имеют обратную галочку, что приводит к ошибке при ее подготовке.

$query = "select * from `dbname` table where `table`.column= ?
ORDER BY `table`.column DESC LIMIT 2 ";

Это должно исправить эту ошибку.

-2

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

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

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