【问题标题】:PHP select query returning falsePHP选择查询返回false
【发布时间】:2014-09-30 17:47:40
【问题描述】:

我有这段代码:

$result = mysqli_query($con , 'SELECT * FROM messages WHERE group = "'.$_POST['group'].'" ORDER BY date '.$_POST['order'].'');

我不明白为什么它总是让我返回错误。变量 $_POST['group'] 和 $_POST['order'] 不为空。

$_POST['group']='PHP'
$_POST['order']='DESC'

与数据库的连接也是正确的。

【问题讨论】:

  • 添加一个echo mysqli_error() ...并且永远不要直接在你的SQL语句中使用不安全的POST变量。
  • 你说的是什么意思:“Ads an echo mysqli_error()”
  • 这:ORDER BY date 可能是问题所在。试试:ORDER BY 'date'.
  • @Montoolivo 对不起;在您的查询后添加 echo mysqli_error();。它将从您失败的 MySQL 语句中输出错误消息。
  • 这里是错误信息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'group = "All" ORDER BY date ASC' 附近使用正确的语法

标签: php sql return


【解决方案1】:

GROUPmysql reserved word,需要用反引号引用;

SELECT * FROM messages WHERE `group` =  ...

您也对 SQL 注入持开放态度,您永远不应将字符串格式的未经验证/未经转义的 POST 数据添加到您的 SQL 中。对用户数据进行查询的最安全方法是使用准备好的语句,或者 - 作为一种不太安全的替代方法 - 使用 mysqli_real_escape_string 转义数据。

【讨论】:

  • 很容易忘记那些该死的保留字! :)
  • 我将组更改为组并且它有效。我知道 group 是一个关键字,但是当我这样命名表的列时,PHP My Admin 并没有给我一个错误。感谢大家的宝贵时间。
【解决方案2】:
$result = mysqli_query($con , "SELECT * FROM messages WHERE group = '".mysqli_real_escape_string($_POST['group'])."' ORDER BY date '".mysqli_real_escape_string($_POST['order'])."'";

尝试像这样格式化查询,看看它是否有助于您的结果。我还添加了mysqli_real_escape_string() 来转义您的输入,因为您的查询对 SQL 注入开放。

http://php.net/manual/en/mysqli.real-escape-string.php

【讨论】:

  • 您将以单引号之间的订单值结尾... ORDER BY date 'DESC'
  • 那么,您为什么不直接发表评论并给我修正的机会,而不是投反对票?
  • 而事实上,你只是没有指出group保留关键字的问题,并没有修复这个错误......
  • @FabienTheSolution 您应该阅读以下内容:stackoverflow.com/help/privileges/vote-down “应该为极端情况保留投票权。它不能替代沟通和编辑。” – 听起来很熟悉?...
  • 事实是您没有解决问题并创建一个新问题...Use your downvotes whenever you encounter [...] an answer that is clearly [...] incorrect...而不是修复它...您仍在争论不赞成票...
猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2023-03-31
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多