2015-09-09 2 views
0

Cette requête fonctionne très bien sur Sequel Pro:requête fonctionne sur Sequel Pro mais pas sur mon script 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; 

Quand je l'utilise sur mon script php il renvoie une erreur. Ceci est la requête complète en 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); 

C'est l'erreur:

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

Je comprends que cette déclaration peut retourner 'faux' si la requête échoue:

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

Cependant , Je ne peux pas voir ce qui ne va pas dans la requête. Toute aide est la bienvenue!

Merci beaucoup.

+0

Vous devez vérifier si '$ statement' est faux après avoir exécuté' $ statement = $ sql-> prepare ($ query); 'Si c'est faux, vous pouvez rechercher les erreurs avec l'erreur' echo $ sql->; '. Cela donnera plus d'idée sur ce qui ne va pas. – seartun

+0

@JayBlanchard S'il vous plaît lire les commentaires sur le code: // $ sql est ma connexion et cela fonctionne bien sur d'autres requêtes. J'utilise un fichier include où je fais la connexion. Ce n'est pas le problème. –

+0

L'erreur est 'Colonne inconnue' t2.sender_id 'dans' clause where '. Je changeais la requête pour voir si j'obtiendrais des résultats différents et apparemment aucun des alias ne fonctionne correctement. J'ai aussi des erreurs pour '' t1.sender_id''. –

Répondre

-2

Votre instruction de préparation renvoie false à cause d'une chaîne de requête non valide. Changez votre requête comme celle ci-dessous. À l'heure actuelle, vous échappez vos noms de colonnes parce qu'ils sont à l'arrière-tique qui se traduit par une erreur tout en préparant

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

Cela devrait corriger cette erreur.

+0

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

+0

JayBlanchard l'a cloué. Lisez les commentaires ci-dessus. –