Запрос, который работает в SQL, но не в PHP - PullRequest
2 голосов
/ 19 июня 2009

У меня проблемы с запросом SQL, который я вставил в фрагмент кода PHP для получения некоторых данных. Сам запрос отлично работает в SQL, но когда я использую его в своем PHP-скрипте, он говорит «Ошибка в запросе», а затем цитирует весь оператор SQL. Если я скопирую и вставлю оператор SQL из сообщения об ошибке непосредственно в MySQL, он будет выполнен без ошибок.

Из моих исследований я считаю, что где-то пропущен апостроф, поэтому PHP может сбивать с толку предложения, но у меня недостаточно опыта, чтобы знать, куда их вставить.

В запросе используется переменная $ userid, которая указана ранее в сценарии 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;

После этого раздела сценарий затем определяет выходные данные и выводит необходимые фрагменты, как обычно. Я доволен последней частью кода, так как он работает в другом месте, но проблема, с которой я столкнулся, кажется, находится в разделе выше.

Может кто-нибудь заметить ошибку?

Отредактировано для добавления следующей дополнительной информации:

Все поля являются числовыми значениями, ни одно из которых не является текстовым. Я попытался поместить '$ userid', но это только заставляет ошибку отображать '' вокруг этого значения в результатах ошибки. Вопрос остается тем же. Добавление родительских слов также не помогло. Я сделал несколько проб и ошибок, прежде чем опубликовать свой вопрос.

Если это поможет, последняя часть используемого кода bieng выглядит следующим образом:

$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>";

Ответы [ 4 ]

8 голосов
/ 19 июня 2009

Вы проверяете !$res, должно быть !$result:

$result = mysql_query($sql);
if (!$result) {
  die('Error: ' . mysql_error() . ' in query ' . $sql);
}
0 голосов
/ 19 июня 2009

вы должны протестировать с кавычками $ userid и круглыми скобками вокруг двух операторов.

0 голосов
/ 19 июня 2009

Я предполагаю, что named_user_id является числовым полем, но какой тип является продавцом? Если это символьное поле, то $ userid придется заключать в кавычки, как предполагает streetpc.

Еще одна вещь, которую нужно проверить, это то, что у вас есть хотя бы один пробел после конца ваших строк для каждой строки запроса. Это сбило меня с толку раньше. Иногда при переходе от вашего редактора / IDE к инструменту базы данных эти проблемы молча решаются.

0 голосов
/ 19 июня 2009

Полагаю, вы echo() запрашиваете где-нибудь и копируете его из браузера. Может ли быть так, что $userid содержит теги xml? Они не будут отображаться в браузере, вам нужно будет просмотреть исходный код страницы, чтобы определить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...