1

私はについて読者でしたPDO、そして私はそれらの2つの方法の違いは何であるか疑問に思いました:

public function query($sql)
    {
        $req = $this->db->prepare($sql);
        $req->execute();
        return $req->fetchAll(PDO::FETCH_OBJ);
    }

public function query($sql, $data  = array())
    {
        $req = $this->db->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }

2番目の方法でexecuteは、パラメータとして空の配列があり、最初の方法にはありません。空の配列をパラメータとして使用する役割は何executeですか?

4

3 に答える 3

1

事前にbindParam()関数を使用する代わりに、配列にパラメーターバインディングを追加できます。

たとえば、IDで何かを選択したい

    $stmt = $dbh->prepare("SELECT * FROM `something` WHERE `id` = ?");
    $stmt->execute(array($id));

と同じです

    $stmt = $dbh->prepare("SELECT * FROM `something` WHERE `id` = ?");
    $stmt->bindParam(1, $id, PDO::PARAM_INT, 11);
    $stmt->execute();

bindParam関数についてはよりよくチェックできますが、PHPマニュアルPDO :: execute()をチェックしてください

于 2013-03-17T13:57:39.050 に答える
1

配列はデフォルトでのみ空です。その配列に値を渡すことができ、それらはSQLステートメントに適切に挿入されます(つまり、-array key => fieldname)。

関数パラメーターで空の配列を定義すると、これはオプションのパラメーターであり、関連する場合にのみ、強制的に渡す必要はありません。たとえば、INSERTコマンドを実行する場合です。パラメータに値を渡さない場合、$dataデフォルト値は単に空の配列になります。

デフォルトパラメータの使用例-

function saySomething($text="Hello World!"){
  echo $text;
}

saySomething(); // will echo out the default "Hello World!"
saySomething("Goodbye World!"); // will echo out "Goodbye World!" as specified. 
于 2013-03-17T13:59:23.993 に答える
1

1つ目は、パラメーターなしでクエリを実行できるようにします。
2つ目は、パラメーターを使用して、または使用せずにクエリを実行できるようにします。

$data = $db->query("SELECT * FROM table"); 
$data = $db->query("SELECT * FROM table WHERE id=?",array($id)); 

両方とも動作します。

于 2013-03-17T14:07:10.227 に答える