【问题标题】:how to use a reserved keyword in query [duplicate]如何在查询中使用保留关键字[重复]
【发布时间】:2014-01-21 23:45:44
【问题描述】:

好的,所以我有一个更新表的查询,但是当我删除更新的组部分时它才有效,没有这个它可以正常工作。

所以我知道 group 可能是保留关键字,我尝试将其放置为 [group] 但仍然不起作用。

当我回显我得到的查询时:

UPDATE users SET username='superman', dob='0000-00-00', location='The Daily Planet ', group='2' WHERE id='136'

它只是不插入数据库。 有人知道我怎样才能让它工作吗?

完整的php代码查询:

require 'core/init.php';
$username = mysql_real_escape_string($_POST["username"]);
$dob = mysql_real_escape_string($_POST["dob"]);
$location = mysql_real_escape_string($_POST["location"]);
$group = mysql_real_escape_string($_POST["group"]);
$user_id = (int)$_POST['id'];

  $result = mysql_query("UPDATE users
              SET username='$username', 
                  dob='$dob',
                  location='$location',
                  group='$group'  
              WHERE 
              id=$user_id");

    header("location:admin.php");

【问题讨论】:

    标签: php mysql database sql-update reserved-words


    【解决方案1】:

    对任何reserved word 使用反引号`。最好对任何列名、表名等使用反引号。

    UPDATE `users`
    SET `username` = '$username', `dob` = '$dob',`location` = '$location',`group` = '$group'  
    WHERE `id` = $user_id
    

    【讨论】:

    • 哇,这么简单。非常感谢,我不知道。
    • 呃。最好的解决方案是不使用标识符的保留字。在所有标识符上使用反引号只是查询混乱。
    【解决方案2】:

    方括号 ([]) 在 Microsoft SQL Server 和 Access 中用作转义字符。 MySQL 中使用了反引号。标准字符是双引号,这似乎适用于几乎所有其他数据库。

    应警告您不要在数据库中使用保留字作为名称。特别是作为基本 SQL 语法一部分的保留字。比如:

    select "group", count("group")
    from t
    group by "group"
    

    可能很难阅读。

    最后,我认为你应该只转义实际的保留字,而不是全部:

          UPDATE users
              SET username = '$username', 
                  dob = '$dob',
                  location = '$location',
                  "group" = '$group'  
              WHERE id = $user_id
    

    【讨论】:

    • 谢谢你很多我可以学习的信息,我不知道括号只是ms sql。很棒的信息 +1
    猜你喜欢
    • 2016-02-02
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多