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

发布于 2022-09-02 21:06:31 字数 400 浏览 19 评论 0

需要向数据库查询,但是字段和字段值都是客户端传过来的,所以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 '字段'=····
' 而不是 `,所以导致查不出结果,请问该如何绑定一个字段名呢?
谢谢诸位

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

守不住的情 2022-09-09 21:06:31

为什么要这样处理呢?

可以定义一个数组 比如

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

这样总不会有注入了吧

扭转时空 2022-09-09 21:06:31

我个人建议你最好把你要变更都字段单独做处理之后当作一个变量赋值,字段和值都设置成预处理形式PDO貌似不能识别

脱离于你 2022-09-09 21:06:31
$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-09-09 21:06:31

汗,你这也太死板了。字段名单独处理一下,例如

$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-09-09 21:06:31

绑定只能绑定值,字段名要自己处理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文