2011-12-11 28 views
1

どのように '?'変数は?以下のような何か:疑問符プレースホルダー

$name = 'test' ; 
    $lname = 'lastTest'; 
    $id = 1 ; 
    ->where ('customers.name = ? and customers.lastname = ? and customers.id = ?' , $name , $lname , $id) ; 

出力:

customers.name = 'test' and customers.lastname = 'lastTest' and customers.id = 1

任意のアイデア?

+0

これにはどのライブラリが使用されていますか? –

+0

なし、それは私のフレームワークです。 –

+0

なぜそれが必要ですか?データベース用の独自のプレースホルダシステムを実装していますか?あなたはもっと具体的になりませんか? –

答えて

5

私は本当にあなたがPDOのようなライブラリを使用すべきだと思うが、ここではそれにもかかわらずソリューションです:

public function where($query) 
{ 
    $args = func_get_args(); 
    array_shift($args); 

    $query = preg_replace_callback('/\?/', function($match) use(&$args) 
    { 
     return array_shift($args); // wrap in quotes and sanitize 
    }, $query); 

    return $query; 
} 
+0

ニース.. +1、ありがとう –

1

だけでなく、あなたは標準のprintfの構文を使用することができ、このような原始的な置換のために。

$name = "'test'"; 
$lname = "'lastTest'"; 
$id = 1; 
$sql = sprintf('customers.name = %s and customers.lastname = %s and customers.id = %d' , 
       $name , $lname , $id) ; 

printfの構文を使用して、クエリにリテラルのプレースホルダー記号を追加する必要があります、このような稀なことはまだできた場合のエスケーププレースホルダをサポートしていることに注意してください。識別子、配列、など

0

// ModifiedQuery変数に格納あなたの予想フォーマット -

しかし、実際の生活の使用のために私はあなたがデータの異なる種類を追加せ、入力されたプレースホルダを実装すると思います。

$query = "customers.name = ? and customers.lastname = ? and customers.id = ?"; 
$params = array("?", "?", "?"); 
$actualParams = array($name, $lname, $id); 

$modifiedQuery = str_replace($params, $actualParams, $query); 
0

私は正直言ってPDOを知らないのですが、準備されたステートメントはすでにmysqliでこれを行います。これはオプションですか?

+0

準備声明が非常にあります制限されたユーザビリティ –

+0

なぜそれを言うのですか? –

+0

は、SET演算子のためにあなた自身の小さなプログラムを書く必要があると言います。識別子プレースホルダはまったくありません。等々。 –