2016-09-08 1 views
0

バインドパラメータ内で設定されたすべてのパラメータに値を割り当てるループがあります。私の問題は、バインド時に動的にparam型を設定する方法があまりよく分かりません。例えばPDA用にPARAM型を動的に設定

は、ここでのループは次のとおりです。

foreach(array_combine($cols,$vals) as $col => $val) { 
    $f->bindParam(':'.$col,$val,PDO::PARAM_INT); // loop through columns and values array and bind those params 
} 

しかし - $ヴァルスは、配列内の値のいずれかの文字列が含まれている場合、これは(明らかに)分割します。

$ valsの値の型に応じて動的にPARAM_INTを設定するにはどうすればよいですか?

私は(GETTYPEを使用して考えられてきました)しかし、それはそれは汚いと醜いだろうように... :)

+0

['bindParam()'](http://php.net/manual/fr/pdostatement.bindparam.php)のPhPマニュアルには、オプションの3番目のアジャストメントを置く必要はありません。この関数は、クエリで設定する型を決定します。 –

答えて

1

が全く結合して気にしないでくださいに見えた - ちょうど実行にすべてを送信します。

$pdo->prepare($sql)->execute(array_combine($cols,$vals)); 

は、そうでない場合、このメソッドは、LIMIT句パラメータにチョークますように、しかしエミュレーションモードをオフにすることを忘れないでください。

しかし、あなたが実装しようとしている、このような動的なクエリ建物はprone to SQL injectionであることを心に留めておくと、適切な保護を適用します。

+0

ありがとうYCS - 私はただexecute()に配列を渡すことができ、私はこれをオーバーコンプリートしていることがわかりました。これで渡すことができましたが、fetchAll(PDO :: FETCH_ASSOC)で呼び出せるオブジェクトではなくブール値を返します。私は何が欠けていますか? – Jeff

+0

私はそれをうまく処理しました - これを行う必要がありました: $ f = $ c-> prepare($ q-> ConstructPrepared()); $ f-> execute($ vals); $ r = $ f-> fetchAll(PDO :: FETCH_ASSOC); – Jeff

関連する問題