2017-08-24 8 views
0

DboSource::rawQuery()のようにログを保存する必要があるapp/Libにヘルパーライブラリがあります。文章はかなり曖昧です:プリペアドステートメントを使用した未処理の挿入クエリ

/** 
* Executes given SQL statement. 
* 
* @param string $sql SQL statement 
* @param array $params Additional options for the query. 
* @return bool 
*/ 
    public function rawQuery($sql, $params = array()) { 
     $this->took = $this->numRows = false; 
     return $this->execute($sql, $params); 
    } 

...そして、私がオンラインで見つけたのは、SQLインジェクションが存在しないというふうに思っています。どんなに私がしようとするもの構文:

public function log (DataSource $db) { 
    $sql = 'INSERT INTO log (foo, bar) 
     VALUES (:foo, :bar)'; 
    $params = array(
     'foo' => 'One', 
     'bar' => 'Two', 
    ); 
    $db->rawQuery($sql, $params); 
} 

...私はいつもこのようなデータベースエラーを取得していない:

SQLSTATE [42000]:[Microsoft]の[SQL ServerのODBCドライバー11] [SQL Serverの] ':'の近くの構文が正しくありません。

私も試した位置プレースホルダ(?)、さらにはPDOのようなのparams(PDO::PARAM_STRとし、すべてのもの)。

SQL Serverに対してCakePHP/2.5.5でパラメータ化された生のクエリを実行する構文は何ですか?

答えて

0

回答は(明らかに):なしです。私たちが読むことができるsource code for Sqlserver::_execute()

/** 
* Executes given SQL statement. 
* 
* @param string $sql SQL statement 
* @param array $params list of params to be bound to query (supported only in select) 
* @param array $prepareOptions Options to be used in the prepare statement 
* @return mixed PDOStatement if query executes with no problem, true as the result of a successful, false on error 
* query returning no rows, such as a CREATE statement, false otherwise 
* @throws PDOException 
*/ 

のであなただけではないを書く上で、読書のプリペアドステートメントを使用することができます - !

public function log (DataSource $db) { 
    $sql = sprintf('INSERT INTO log (foo, bar) 
     VALUES (%s, %s)', 
     $db->value('foo'), 
     $db->value('bar') 
    ); 
    $db->rawQuery($sql); 
} 
:あなたが戻って2000年代初めと 脱出に取得する必要があります

関連する問題