【问题标题】:Whats wrong with my ´SELECT´我的“SELECT”有什么问题
【发布时间】:2015-03-29 19:59:24
【问题描述】:

我为这个 SELECT 快疯了。 它有什么问题?

错误代码

无法运行查询:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 2 行的“in”附近使用的正确语法

PHP

$status = 'in';
  //Prepare query
  $query = "SELECT * FROM usr_time_reg
  WHERE usr_stamp_status = $status";

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    在字符串周围使用引号。

    SELECT * FROM usr_time_reg
    WHERE usr_stamp_status = '$status'
                             ^-------^-------here
    

    否则数据库会认为您的意思是列名而不是值。

    或者更好地使用 Prepared Statements 让框架为您处理所有这些并防止 SQL 注入。

    【讨论】:

    • 出于某种原因,我不认为这是必要的!但这解决了它。我一定很累。谢谢!
    【解决方案2】:
    $query = sprinf("SELECT * FROM usr_time_reg
        WHERE usr_stamp_status = '%s'",$status);
    

    【讨论】:

      【解决方案3】:

      您的代码将生成一个查询

      SELECT * FROM usr_time_reg
        WHERE usr_stamp_status = in
      

      所以你的数据库很困惑,你正在比较一个不带引号的字符串值(你的情况只有在列是 int 类型时才有效),这对于字符串比较来说是必需的。

      解决方案 1

       $query = "SELECT * FROM usr_time_reg
        WHERE usr_stamp_status =".$status;
      

      解决方案 2

      $query = "SELECT * FROM usr_time_reg
            WHERE usr_stamp_status = '$status' ";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 2010-09-14
        • 2015-06-06
        相关资源
        最近更新 更多