0

動的 SQL ステートメントを作成し、PDO を使用して実行したいと考えています。私の問題は、いくつかのパラメーターがあり、パラメーターを渡す方法が思いつかないことです。元 :

$query = "Select * from tbl_task where 1=1";
if (!empty($name)) $query .= " AND name = ?";
if (!empty($status)) $query .= " AND status = ?"
$db_stmt = new PDOStatement();
$db_stmt = $this->db->prepare($query);
$db_stmt->bindParam (1,$name); 
$db_stmt->bindParam (2,$status);

同じ if ステートメントを bindParam 命令で記述しない限り、パラメーターがバインドされず、バインドする必要があるパラメーターの数がわかりません。

代わりにbindParammysql_real_escape_stringを PDO に試してみましたが、何らかの理由でパラメーターが空で追加されました。

動的クエリを作成してパラメーターを PDO にバインドする方法について何か考えはありますか?

編集1:

$arr = array();
if (!empty($name)){
    $query .= " AND `name` like :NAME";
    $arr['NAME'] = $name;
}
$db_stmt = new PDOStatement();
$db_stmt = $this->db->prepare($query);
$db_stmt->execute($arr);

「いいね」の書き方は?私は試した

$query .= " AND `name` like :NAME" . "%";

動作していません。

4

3 に答える 3

0

私が通常行うことは次のとおりです。

$query = "Select * from tbl_task where 1=1";
if (!empty($name)) $query .= $db->parse(" AND name = ?s", $name);
if (!empty($status)) $query .= $db->parse(" AND status = ?s",$status);
$data = $this->db->getAll($query);

アイデアは、クエリ全体ではなく、任意のクエリ部分のプレースホルダーを解析する関数を持つことです。
ただし、ネイティブのプリペアドステートメントは気にしません。それらは、PHPスクリプトを無用なコードの山で汚染しますが、利点は1つもありません。

言われたとおりに更新された質問に答えるために
、任意のクエリ部分をバインドすることはできません。しかし、文字通りのみ。
だから、あなたの文字通りをのように見せてfoo% 、それからそれを通常の方法でバインドします。

于 2013-02-21T10:34:13.807 に答える