Является ли $ id целым числом или строкой?
Попробуйте вместо этого использовать связанный параметр. Вот пример того, как это прекрасно работает в моем коде:
public function execErrorWarnLogs($id){
try {
$sql = "exec BUSINESS_MONITOR_LOGS @id=:id";
$req = $this->_bdd->prepare($sql);
$req->execute([
'id' => $id
]);
$res = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return $res;
} catch (Exception $e) {
echo $e->getMessage();
}
}
Вы также должны использовать параметры в целях безопасности!
Две заметки на сайте:
Если вы выполняете интерполяцию строк, вам не нужно готовить оператор. Тогда вы можете просто сделать:
$req = $this->_bdd->query($sql);
$res = $req->fetchAll(PDO::FETCH_ASSOC);
Но рекомендуемый подход (для безопасности) заключается в предоставлении значений в качестве связанных параметров и подготовке запроса.
Насколько я знаю, вам не нужен $ req-> closeCursor (), если вы используете последний драйвер pdo от Microsoft для MSSQL. Необходимость в closeCursor зависит от используемого вами драйвера.