查询在SQL中有效但在PHP中无效

时间:2009-06-18 20:32:30

标签: php sql mysql

我遇到了一个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',但这只会让错误在错误结果中显示''这个值。问题依然如故。添加学生重点也没有帮助。在发表我的问题之前,我做了一些试验和试验。

如果有帮助,使用的代码的最后部分如下:

$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 个答案:

答案 0 :(得分:8)

您正在检查!$res,它应该是!$result

$result = mysql_query($sql);
if (!$result) {
  die('Error: ' . mysql_error() . ' in query ' . $sql);
}

答案 1 :(得分:0)

我想,你在某处echo()查询并从浏览器中复制粘贴它。可能是$userid包含xml标签吗?它们不会显示在浏览器中,您必须查看页面源以发现它们。

答案 2 :(得分:0)

你应该用引用的$ userid进行测试,并在两个语句周围加括号。

答案 3 :(得分:0)

我假设rated_user_id是一个数字字段,但卖家是什么类型的?如果它是一个字符字段,则必须引用$ userid作为streetpc建议。

要检查的另一件事是,对于每行查询,在行结束后至少有一个空格。那之前让我绊倒了。有时从编辑器/ IDE到数据库工具时,这些问题都会被默默处理。