次の値をデータベース レコード更新関数に渡すと、何らかの理由で解決できません。すべての列に同じ値が設定されます。
渡すデータは次のとおりです。
$_values = array(
'client_fname' => $_POST['client_fname'],
'client_lname' => $_POST['client_lname'],
'client_email' => $_POST['client_email']
);
$_args= array('client_id' => $_id);
$db->dbUpdate('client', $_values, $_args)
投稿された値ではなく、すべての列 (client_fname、client_lname、client_email) を $_id 値に更新します。そして、私は自分が間違ったことを理解できません:(
パラメータをバインドする前に作成するクエリは次のとおりです。
UPDATE client SET client_fname=:0, client_lname=:1, client_email=:2 WHERE client_id=:w0
ここに関数があります
public function dbUpdate($_table, $_values, $_args) { //TODO: Fix Function
try {
$query = 'UPDATE '.$_table.' SET ';
$i = 0; foreach ($_values as $_field => $_value) {
if($i == 0) {
$query .= $_field.'=:'.$i;
} else {
$query .= ', '.$_field.'=:'.$i;
}
$i++;
}
$query .= ' WHERE ';
$i = 0; foreach ($_args as $_field => $_value) {
if($i == 0) {
$query .= $_field.'=:w'.$i;
} else {
$query .= ', '.$_field.'=:w'.$i;
}
$i++;
}
$sql = $this->db->prepare($query);
$i = 0; foreach ($_values as $_field => $_value) {
$sql->bindParam(':'.$i, $_value); $i++;
}
$i = 0; foreach ($_args as $_field => $_value) {
$sql->bindParam(':w'.$i, $_value); $i++;
}
if($sql->execute()) {
return true;
} else {
return false;
}
}
catch (PDOException $e) {
print_r($e->errorInfo);
die();
}
}