pdo预处理时,需要绑定字段,但是出现了问题
Jul 06, 2016 pm 01:53 PM
需要向数据库查询,但是字段和字段值都是客户端传过来的,所以sql语句是这么写的
<code>$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); </code>
但是字段名field最后也被做了处理,结果应该是成了selecte ·· from xx where '字段'=····
是 ' 而不是 `,所以导致查不出结果,请问该如何绑定一个字段名呢?
谢谢诸位
回复内容:
需要向数据库查询,但是字段和字段值都是客户端传过来的,所以sql语句是这么写的
<code>$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); </code>
但是字段名field最后也被做了处理,结果应该是成了selecte ·· from xx where '字段'=····
是 ' 而不是 `,所以导致查不出结果,请问该如何绑定一个字段名呢?
谢谢诸位
为什么要这样处理呢?
可以定义一个数组 比如
<code>$field = [ 'name' => 'name', 'type' => 'type' ]; $field = $field[$_GET['field']];</code>
这样总不会有注入了吧
我个人建议你最好把你要变更都字段单独做处理之后当作一个变量赋值,字段和值都设置成预处理形式PDO
貌似不能识别
$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);
汗,你这也太死板了。字段名单独处理一下,例如
<code>$field = str_replace('`', '', $field); $sql = "... `{$field}` = :fieldValue";</code>
事实上通常客户端是不能直接传递字段名的,比较危险,最好是用下拉框选择,后台再处理,比如
<code>$useableFields = array('f1', 'f2', 'f3'); if (isset($useableFields['request_field_number'])) $selectedField = $useableFields['request_field_number']; else $selectedField = false;</code>
绑定只能绑定值,字段名要自己处理

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發
