在这个函数,以及其他函数,如更新,删除和插入,如何在这个代码中用pdo->来处理sql注入?
function get_rows($fields = '*', $where = ' 1=1 ') {
$this->_query = "select $fields from {$this->table} where {$where}";
$stm = $this->_pdo->query($this->_query);
if(!$stm)
die(var_export($this->_pdo->errorinfo(), TRUE));
else
return $stm->fetchAll();}
function insert($fields, $data) {
$this->_query = " insert into $this->table ($fields) VALUES ($data)";
$this->_pdo->exec($this->_query);
}
答案 0 :(得分:0)
取自PDO准备好的声明的API文档:
首先,使用占位符创建预准备语句。接下来,将占位符与变量绑定,并调用PDO提供的execute方法。
所以你的功能可能如下:
function insert($fields, $data) {
$stmt = $dbh->prepare("INSERT INTO ".$this->table ."(fields, values) VALUES (:fields, :values)");
$stmt->bindParam(':fields', $fields);
$stmt->bindParam(':fields', $values);
$stmt->execute();
}
请注意,如果您需要进行一些额外的调整,这取决于您提供名称和值参数的准确程度,但我希望您从示例中获得要点。使用bindParam绑定预准备语句中的参数,然后执行它。
答案 1 :(得分:0)
prepare()
因为您决定创建自己的PDO包装函数而无济于事。
PDO
中不支持绑定列和表。
此时你将面临自己的风险,逃避角色,sql注入......
对于表和列可能是理解的,您可以使用硬编码字符串数组,如果找不到则抛出错误:
if (!in_array($field, $list_of_fields)) {
throw new MyPDOException('Field not found');
}
至于价值,你必须做一些工作来清理它们,所以你看到很多你不需要做的工作?
也许它是一个简单的CRUD应用程序但是如果你必须运行JOIN查询怎么办?你打算为它创建一个函数吗?
它会变得混乱,我建议你编写纯PDO代码,因为当你受限时,你最终会重新编写自己的库。