0

このクエリは 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);

ただし、クエリの何が問題なのかわかりません。どんな助けでも大歓迎です!

どうもありがとう。

4

1 に答える 1

-2

有効なクエリ文字列ではないため、準備ステートメントが false を返しています。以下のようにクエリを変更します。現在、列名はバックティックにあり、準備中にエラーが発生するため、エスケープしています

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

これでこのエラーは修正されるはずです。

于 2015-09-09T02:56:40.420 に答える