【问题标题】:MYSQL Syntax Error - SELECT statement [duplicate]MYSQL 语法错误 - SELECT 语句 [重复]
【发布时间】:2012-10-23 21:28:09
【问题描述】:

我一直在尝试调试的屏幕上显示此错误。

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'to = 'testname'' 附近使用正确的语法”

我使用的函数如下:

function recentMessages() {
    $tbl_name="messages";
    $username = $_SESSION['username'];
    $result = mysql_query("SELECT * FROM $tbl_name WHERE to = '$username' ") or die(mysql_error());
    while ($row = mysql_fetch_row($result))
      {
        return $row['date']." ".$row['time']." ".$row['from']." ".$row['subject']. "<br />";    
      }
}

基本上,我试图做的是从数据库消息中获取所有数据行,其中谁是会话的用户名,并且它的回显。关于我做错了什么的任何想法?谢谢

【问题讨论】:

  • @BrendanLong 在 sql 中转义变量是一个有效点(当然),但是:如果修改会话数据很简单,那么 sql 注入将是您的应用程序最不担心的问题。安德鲁 - 考虑让 $username = "' OR 1=1 or x='"
  • 在数据库中使用它之前,你真的应该从外部来源escape string data,即使你认为它可能是安全的。

标签: php mysql


【解决方案1】:

to 是保留字。用刻度线括起来。

... WHERE `to` = '$username'

请参阅 MySQL reserved words

尽可能避免使用保留字。

【讨论】:

  • 你好!甚至没有意识到他们有 mysql 的保留字!
  • @AndrewL 大多数(如果不是全部)DBMS 都有保留字。
【解决方案2】:

to 是保留字。试试这个:

$result = mysql_query("SELECT * FROM $tbl_name WHERE `to` = '$username' ") 
                or die(mysql_error());

通常尽量避免使用像 to、between、from ... 等小词。只是为了防止此类问题。更好的解决方案是有一个字段名称,例如:“receiver”或“message_to”或类似的名称

【讨论】:

    【解决方案3】:

    TO 是 MySQL 中的保留字。使用反引号分隔。

    SELECT * FROM $tbl_name WHERE `to` = '$username'
    

    【讨论】:

      【解决方案4】:

      to 是我相信的保留字。尝试更改为 [to] 编辑:不完全确定。我把它放在SQL Server中,看到TO是保留字。

      【讨论】:

      • 我相信括号只适用于 MSSQL,我的 MySQL。
      • 天哪,对此的投票是严厉的。这个答案对于问题(保留字)仍然是正确的,只是有错误数据库的语法..
      • @BrendanLong 原始答案严格要求用括号括起来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多