我正在从数据库处理程序类构建SQL查询。但是,我在列名称周围添加反引号有困难。我需要反引号,因为该表有一个名为ADMIN的列,而我的查询失败,因为它是我使用的mysql版本中的保留关键字。
'ADMIN LIKE'附近的SQL语法有错误 '%search_string%'或类似'%search_string%')的订单(按ID排序)
下面非常简单地描述了我如何使用该类
我将$ where子句发送到这样的类
LayoutModule
然后为准备好的语句添加占位符
$where = array("ID" => "%search_string%",
"USERNAME"=> "%search_string%",
"ADMIN"=> "%search_string%",
"BAN" => "%search_string%");
并获得“ ID赞?或USERNAME赞?还是ADMIN赞?或Ban赞?”
我试图添加一个foreach循环来更改像这样的列名
$where = implode(" LIKE ? $andOr ", array_keys($where));
但是这不起作用,因为我随后在像这样的查询中以foreach($where as $key => $value) {
$where["`" . $key "`"] = $value;
unset($where[$key]);
}
的形式获取列名,并且mysql给我关于"'`ID`' LIKE ? OR '`USERNAME`' LIKE ? OR '`ADMIN`' LIKE ? OR '`BAN`' LIKE ?"
的错误不存在
在处理类似这样的字符串时,是否仍然需要在列名中添加反引号?还是我必须重命名列名ADMIN并遍历整个页面并使用新的列名更改脚本?
答案 0 :(得分:1)
您可以使用数组映射将反引号自动添加到列中,方法是将其输入到内爆函数中。
$where = implode(" LIKE ? $andOr ",
array_map(function($key) {
return "`$key`";
}, array_keys($where))
);