2015-09-09 1 views
0

Этот запрос работает отлично на Sequel Pro:Query работает на Sequel Pro, но не на моем PHP скрипт

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 

Я понимаю, что это утверждение может возвращать 'ложь', если запрос не удается:

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

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

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

+0

Вам нужно проверить, является ли '$ statement' ложным после запуска' $ statement = $ sql-> prepare ($ query); 'Если это ложь, вы можете искать ошибки с' echo $ sql-> error; '. Это даст больше информации о том, что не так. – seartun

+0

@JayBlanchard Пожалуйста, прочитайте комментарии по коду: // $ sql - мое соединение, и он отлично работает с другими запросами. Я использую файл include, в котором я делаю соединение. Это не проблема. –

+0

Ошибка: 'Неизвестный столбец 't2.sender_id' в 'where clause''. Я изменил запрос, чтобы узнать, не получится ли у меня разные результаты, и, видимо, ни одна из псевдонимов не работает должным образом. Я получил ошибки для '' t1.sender_id''. –

ответ

-2

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

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

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

+0

http://php.net/manual/en/mysqli-stmt.bind-param.php –

+0

JayBlanchard прибил его. Читайте комментарии выше. –

Смежные вопросы