私はこれにこだわっていますが、最近自分自身を学ぶために 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]: 無効なパラメーター番号: パラメーターが定義されていませんでした
関数で渡す整数値を正しくバインドして、ステートメントを実行できるようにするにはどうすればよいですか?