Doctrine DBAL関数executeQueryを次のように使用しようとしています:
$conn = DBAL\DriverManager::getConnection($connectionParams, $config);
$sql = "SELECT count(*) FROM clients WHERE client_id = :id";
$results = $conn->executeQuery($sql, ['id' => 'foo'], ['id' => \PDO::PARAM_STR]);
var_dump($results->fetchAll());
var_dump($results->rowCount());
これは正常に動作します:
array (size=1)
0 =>
array (size=1)
'count(*)' => string '1' (length=1)
int 1
ただし、コードは次の行を使用しても機能します (型パラメーターが正しく宣言されていないか、まったく宣言されていません)。
$results = $conn->executeQuery($sql, ['id' => 'foo'], ['id' => \PDO::PARAM_INT]);
$results = $conn->executeQuery($sql, ['id' => 'foo'], ['notatag' => \PDO::PARAM_STR]);
$results = $conn->executeQuery($sql, ['id' => 'foo']);
バインドされた変数データ型の宣言が使用されていないことを示唆しており、これが SQL インジェクションから保護されているかどうかについて懸念が生じています。
ここで何か間違ったことをしていますか?コードが安全であることを確認するにはどうすればよいですか?