我正在寻找使用 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 注入保护的担忧。
我在这里做错了吗?如何确保我的代码是安全的?