PDOを使用するようにmysql関数を更新しています。私はそれのほとんどのコツを持っていますが、レコード内の複数のフィールドを更新するための更新機能に苦労しています。この関数はクラス内にあり、他のテーブルなどで再利用できるように柔軟性を維持しようとしています。
これまでの私の機能は次のとおりです。
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を使用する必要があると思いました-これは正しいですか、それともexecute()に行くことができますか?
感謝します