php - pdo预处理时,需要绑定字段,但是出现了问题

 mobiledu2502862777 发布于 2022-11-16 20:53

需要向数据库查询,但是字段和字段值都是客户端传过来的,所以sql语句是这么写的

$sql="select id from goods_type_attr where :field=:value and type_id=:type_id";
$this->stmt=$this->pdo->prepare($sql);
$this->stmt->execute($arr);

但是字段名field最后也被做了处理,结果应该是成了selecte ·· from xx where '字段'=····
' 而不是 `,所以导致查不出结果,请问该如何绑定一个字段名呢?
谢谢诸位

5 个回答
  • 绑定只能绑定值,字段名要自己处理

    2022-11-16 20:57 回答
  • 汗,你这也太死板了。字段名单独处理一下,例如

    $field = str_replace('`', '', $field);
    $sql = "... `{$field}` = :fieldValue";

    事实上通常客户端是不能直接传递字段名的,比较危险,最好是用下拉框选择,后台再处理,比如

    $useableFields = array('f1', 'f2', 'f3');
    if (isset($useableFields['request_field_number']))
        $selectedField = $useableFields['request_field_number'];
    else
        $selectedField = false;
    2022-11-16 20:57 回答
  • $sql="select id from goods_type_attr where #field1#=:value and type_id=:type_id";
    $sql = str_replace("#field1#", $param_field, $sql);
    $this->stmt=$this->pdo->prepare($sql);
    $this->stmt->execute($arr);
    2022-11-16 20:57 回答
  • 我个人建议你最好把你要变更都字段单独做处理之后当作一个变量赋值,字段和值都设置成预处理形式PDO貌似不能识别

    2022-11-16 20:57 回答
  • 为什么要这样处理呢?

    可以定义一个数组 比如

    $field = [
        'name'    =>    'name',
        'type'    =>    'type'
    ];
    $field = $field[$_GET['field']];

    这样总不会有注入了吧

    2022-11-16 20:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有