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

何か案は?

4

4 に答える 4

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;
}
于 2011-12-11T13:38:35.087 に答える
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構文は、リテラルプレースホルダーシンボルをクエリに追加する必要がある、このようなまれでありながら可能性のあるケースのプレースホルダーエスケープをサポートしていることに注意してください。

ただし、実際の使用法では、型付きプレースホルダーを実装して、さまざまな種類のデータ(識別子、配列など)を追加できるようにします。

于 2011-12-11T13:40:26.540 に答える
1

// ModifiedQuery変数は、期待される形式を格納します。

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

$modifiedQuery = str_replace($params, $actualParams, $query);
于 2011-12-11T13:49:30.137 に答える
0

PDOが正直であるかどうかはわかりませんが、プリペアドステートメントはすでにmysqliを使用してこれを実行します。これはオプションですか?

于 2011-12-11T16:18:23.963 に答える