我正在更新我的 mysql 函数以使用 PDO。我已经掌握了大部分内容,但正在努力使用更新功能来更新记录中的多个字段。该函数在一个类中,我试图保持它的灵活性,以便与其他表等重用。
到目前为止,这是我的功能:
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 作为最佳实践 - 这是正确的还是我可以去执行()?
任何帮助表示赞赏