如何在查询中使用保留关键字

时间:2014-01-21 23:45:44

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

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

所以我理解群组可能是一个保留的关键字,我尝试将其放置为[group],但它仍无效。

当我回复查询时:

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

它只是不插入数据库。 谁知道我怎么能让这个工作?

完整的php code inc查询:

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");

2 个答案:

答案 0 :(得分:3)

对任何reserved word使用反引号`。更好的是对任何列名,表名等使用反引号。

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

答案 1 :(得分:1)

方括号([])在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