0

Zend Framework 2 でデータベース クエリを作成する場合、ユーザーが送信した値をどのようにサニタイズする必要がありますか? たとえば、次の SQL の $id

$this->tableGateway->adapter->query(
  "UPDATE comments SET spam_votes = spam_votes + 1 WHERE comment_id = '$id'",
  \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE
);
4

1 に答える 1

4

実行時にパラメータを渡すことができます..

 $statement = $this->getAdapter()->query("Select * from test WHERE id = ?");
 $result = $statement->execute(array(99));

 $resultSet = new ResultSet;
 $resultSet->initialize($result);

それらをクエリメソッドに直接渡すこともできます

 $statement = $this->getAdapter()->query(
    "Select * from test WHERE id = ?", 
    array(99)
 );
 $result = $statement->execute();

 $resultSet = new ResultSet;
 $resultSet->initialize($result);

どちらも「Select * from test WHERE id = '99'」というクエリを生成します。

名前付きパラメーターを使用する場合:

$statement = $this->getAdapter()->query("Select * from test WHERE id = :id");
$result = $statement->execute(array(
    ':id' => 99
));

$resultSet = new ResultSet;
$resultSet->initialize($result);

テーブル/フィールド名などを引用したい場合:

$tablename = $adapter->platform->quoteIdentifier('tablename');

$statement = $this->getAdapter()->query("Select * from {$tablename} WHERE id = :id");
$result = $statement->execute(array(
    ':id' => 99
));
于 2013-03-07T14:58:22.457 に答える