【发布时间】:2018-06-26 21:34:07
【问题描述】:
我正在从数据库处理程序类构建我的 SQL 查询。但是,我无法在列名周围添加反引号。我需要反引号,因为该表有一个名为 ADMIN 的列,我的查询失败,因为它是我正在使用的 mysql 版本中的保留关键字。
“ADMIN LIKE”附近的 SQL 语法有错误 '%search_string%' OR BAN LIKE '%search_string%') ORDER BY ID DESC'
下面非常简化的是关于我如何使用该类的描述
我将 $where 子句发送给这样的类
$where = array("ID" => "%search_string%",
"USERNAME"=> "%search_string%",
"ADMIN"=> "%search_string%",
"BAN" => "%search_string%");
然后为准备好的语句添加占位符
$where = implode(" LIKE ? $andOr ", array_keys($where));
然后得到“ID LIKE?OR USERNAME LIKE?OR ADMIN LIKE?OR BAN LIKE?”
我尝试添加一个 foreach 循环来更改这样的列名
foreach($where as $key => $value) {
$where["`" . $key "`"] = $value;
unset($where[$key]);
}
但这不起作用,因为我随后在查询中将列名作为字符串获取,如 "'`ID`' LIKE ? OR '`USERNAME`' LIKE ? OR '`ADMIN`' LIKE ? OR '`BAN`' LIKE ?" 和 mysql 给我一个关于 "`column_name`" 不存在的错误
在处理这样的字符串时是否要在列名中添加反引号,或者我是否必须重命名列名 ADMIN 并浏览整个页面并使用新的列名更改脚本?
【问题讨论】:
-
你的数据库类写得不好。它应该自动添加这些 backsticks。
-
这就是我现在想做的事情。
-
您在使用别名时遇到过这个问题吗?如果你添加
your_alias.column_nameadmin仍然有问题吗? -
解决了 Mickael 的问题。因此,如果无法在字符串中添加反引号,请使用它。