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

Posted

技术标签:

【中文标题】在 SQL 中有效但在 PHP 中无效的查询【英文标题】:Query that works in SQL but not in PHP 【发布时间】:2009-06-18 20:32:29 【问题描述】:

我在插入一段 php 代码以检索一些数据时遇到了 SQL 查询问题。查询本身在 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>";

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

您应该使用引用 $userid 并在两个语句周围加上括号进行测试。

【讨论】:

【参考方案4】:

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

要检查的另一件事是,查询的每一行在行尾后至少有一个空格。这以前让我绊倒过。有时,当从您的编辑器/IDE 转到数据库工具时,这些问题会得到解决。

【讨论】:

以上是关于在 SQL 中有效但在 PHP 中无效的查询的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效

SQL 查询在 phpMyAdmin 中有效,但在 Java 中无效

查询在 mysql 工作台中有效,但在 php 中无效,不知道为啥

SQL 查询字符串在 SQL Server Management Studio 中有效,但在带有 SQLCommand.ExecuteReader 的 VB.net 中无效

Access 2007 中的 SQL 查询有效,但在报表中的表达式生成器中无效(结果为 #name?)

插入查询在 SSMS 中有效,但在 SQLCMD 中无效