从字符串构建mysql查询时,在列名上添加反引号

时间:2018-06-26 13:24:58

标签: php mysql

我正在从数据库处理程序类构建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并遍历整个页面并使用新的列名更改脚本?

1 个答案:

答案 0 :(得分:1)

您可以使用数组映射将反引号自动添加到列中,方法是将其输入到内爆函数中。

$where = implode(" LIKE ? $andOr ", 
    array_map(function($key) {
        return "`$key`";
    }, array_keys($where))
);