我坚持这个,最近切换到PDO学习自己。
/**
* update
* @param string $table A name of a table to update into
* @param string $data An associative array.
* @param string $where WHERE = ?.
*/
public function update($table, $dataArr, $where)
{
$fieldDetails = NULL;
foreach( $dataArr as $key => $value)
{
$fieldDetails .= "`$key` =:$value, ";
}
$fieldDetails = rtrim($fieldDetails,', ');
echo "UPDATE $table SET ($fieldDetails) WHERE (`id`=:$where)";
$stmt = $this->prepare("UPDATE $table SET ($fieldDetails) WHERE (`id`=:$where)");
foreach($dataArr as $key => $value)
{
//Binder key till värde.
$stmt->bindValue(":$key", $value);
}
$stmt->bindValue(":$where", $where);
$stmt->execute();
}
我的插入功能就像一个魅力,但这个更新功能不起作用。我认为它与id没有绑定有关。我在文档和线程中搜索过但找不到解决方案。
我的函数调用。
public function update()
{
$this->db->update(
'testtable',
array(
'text' => 'exempel',
'name' => 'exempel',
), 0);
}
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:参数号无效:
中未定义参数如何正确地将我传入的整数值与函数绑定,以便可以执行语句?。
答案 0 :(得分:0)
编辑:
好吧,我忽略了代码,道歉
无论如何,您的代码对SQL注入是开放的,最好使用PDO tag wiki中的解决方案。
顺便说一句,当不使用像PDO这样的石器时代的库而是使用something more useful时,你根本就不需要update()函数,因为你可以简单地写一下
$db->query("UPDATE ?n SET ?u WHERE id=?i",$table, $dataArr, $id);
请注意,后一个代码比您的更安全,但更灵活:
答案 1 :(得分:0)
$fieldDetails .= "`$key` =:$key, ";
您需要在此处将键名称作为占位符,而不是值。