我正在更新我的mysql函数以使用PDO。我已经掌握了大部分的内容,但正在努力使用更新功能来更新记录中的多个字段。 功能是在一类,我试图保持它灵活的与其他表等使用Php和pdo创建灵活的更新查询 - 使用bindparam的问题
重用这里是我的功能至今:
public function dbUpdateRecord($table, $values, $where)
{
$this->conn();
$fieldNames = array_keys($values);
var_dump($fieldNames);
$set="";
foreach ($fieldNames as $field) {
$set .= " $field = :$field,";
}
//strip last comma
$set = substr($set, 0, strlen($set) - 1);
$wherefields = array_keys($where);
$whereCondition="";
foreach ($wherefields as $field) {
$whereCondition .= " $field = :$field AND";
}
//strip last AND
$whereCondition = substr($whereCondition, 0, strlen($whereCondition) - 3);
$sql = "UPDATE $table SET $set WHERE $whereCondition";
var_dump($sql);
$stmt = $this->db->prepare($sql);
foreach ($values as $field => $value) {
$stmt->bindParam(':$field', $value);
}
foreach ($where as $field => $value) {
$stmt->bindParam(':$field', $value);
}
return $stmt->execute();
}
的问题是在记录的所有字段都由$ where变量中包含的记录的id进行更新。
$ values包含一个数组(fieldname => value)。
我认为问题的关键在于围绕bindparam,并试图让字段名/占位符动态
我想我需要使用bindparam最佳实践 - 这是正确的或我可以去执行()?
任何帮助表示赞赏
您可以编写生成的SQL是什么样子? – fiunchinho 2013-03-27 09:01:53