J'ai des problèmes avec une requête SQL que j'ai insérée dans un morceau de code PHP pour récupérer des données. La requête elle-même fonctionne parfaitement dans SQL, mais lorsque je l'utilise dans mon script PHP, le système indique "Error in Query" (erreur dans la requête) puis récite l'intégralité de l'instruction SQL. Si je copie et colle l'instruction SQL du message d'erreur directement dans MySQL, elle s'exécute sans erreur.
D'après mes recherches, je crois qu'il me manque une apostrophe quelque part, de sorte que PHP peut confondre les clauses, mais je ne suis pas assez expérimenté pour savoir où les insérer.
La requête utilise une variable appelée $userid qui est spécifiée plus tôt dans le script de PHP.
$sql= <<<END
SELECT sum(final_price)
FROM (
SELECT Table_A.rated_user_id, Table_B.seller, Table_B.final_price
FROM Table_A
INNER JOIN Table_B ON Table_A.id=Table_B.id
) AS total_bought
WHERE seller != $userid
AND rated_user_id = $userid
UNION ALL
SELECT sum(final_price)
FROM (
SELECT Table_A.rated_user_id, Table_C.seller, Table_C.final_price
FROM Table_A
INNER JOIN Table_C ON Table_A.id=Table_C.id
) AS total_bought
WHERE seller != $userid
AND rated_user_id = $userid
END;
Après cette section, le script continue à définir la sortie et à envoyer les éléments nécessaires comme d'habitude. Je suis satisfait de la dernière partie du code car elle fonctionne ailleurs, mais le problème que je rencontre semble se situer dans la section ci-dessus.
Quelqu'un peut-il repérer l'erreur ?
Modifié pour ajouter les informations supplémentaires suivantes :
Tous les champs sont des valeurs numériques, aucun n'est du texte. J'ai essayé de mettre '$userid' mais cela ne fait qu'afficher le ' ' autour de cette valeur dans les résultats de l'erreur. Le problème reste le même. L'ajout de parenthèses n'a pas aidé non plus. J'ai fait quelques essais et erreurs avant de poster ma question.
Si cela peut vous aider, la dernière partie du code utilisé par Bieng est la suivante :
$result = mysql_query($sql);
if (!$res) {
die('Error: ' . mysql_error() . ' in query ' . $sql);
}
$total_bought = 0;
while ($row = mysql_fetch_array($result)) {
$total_bought += $row[0];
}
$total_bought = number_format($total_bought, 0);
echo '<b>Your purchases: ' . $total_bought . '</b>';
echo "<b> gold</b>";