0

私は現在、Twitterクローンの構築に関するnettuts.comチュートリアルを行っています。データベースから行を削除する関数があり、クエリメソッドを使用していますが、関数を準備済みステートメントに変換しようとしました.しかし、 Invalid parameter number: parameter was not definedエラーが発生します.関数のコードは次のとおりです。

public function delete($table, $arr){
    $query = "DELETE FROM " . $table;
    $pref = "WHERE ";

    foreach ($arr as $key => $value) {
        $query .= $pref. $key . " = " . ":" . $key;
        $pref = "AND ";
    }
    $query .= ";";
    $result = $this->db->prepare($query);
    $result->execute($arr);
}

$connect = new Model();

$connect->delete("ribbits", array("user_id" => 2,
                                "ribbit" => "trial ribbit"
                                ));

誰かが私が間違っていることを教えてもらえますか?ありがとう!

4

1 に答える 1

0

配列を に渡す場合->execute()、キーの:前に文字が必要です (SQL クエリに表示されるのと同じように)。

したがって、delete関数では、次のように SQL クエリを作成します。

public function delete($table, $arr){
    $keys = array();
    $values = array();

    foreach($arr as $key => $value){
        $keys[] = $key . " = :" . $key;
        $values[":".$key] = $value;
    }

    $query = "DELETE FROM " . $table . " WHERE " . implode(" AND ", $keys);
    $result = $this->db->prepare($query);
    $result->execute($values);
}
于 2013-03-15T15:00:53.423 に答える