Не работает запрос в БД. Битрикс

Постараюсь поменьше воды. Выполняю вот такой запрос: $connection = \Bitrix\Main\Application::getConnection(); $result = $connection->query("SELECT * FROM <table_name> WHERE ID = $id")->fetch();

В ответ пустота. Если вместо $id написать число, т.е. в запросе ID = 12345, то результат есть. Пробовал преобразовать в число, хотя int изначально приходит, но не работает.


Ответы (1 шт):

Автор решения: S.H.

В выражении

$connection->query("SELECT * FROM <table_name> WHERE ID = $id")

внутри скобок находится в кавычках SQL запрос. Это - просто строка. В этой строке не может быть Php - переменной $id. Потому что так, как это написано - нет процесса формальной подстановки значения переменной вметсо её имени.

Когда Вы "руками" делаете эту формальную подстановку - вставляя конкретное значение $id в запрос - то всё начинает работать, потому что SQL запрос, передаваемы в базу, становится осмысленным.

Более тог, я подозреваю, что при выполнении исходногокода Вам должен возвращаться не просто пустой курсор, а ошибка синтаксиса в SQL.

Как решить проблему:

коротко и неправильно:

    $connection->query("SELECT * FROM <table_name> WHERE ID = ".$id);

Почему это неправильно? взможность SQL injection, если в $id будет написно что то вроде

    $id = '1; DROP DATABASE sales;';

Чуть чуть лучше сделать так:

    $connection->query("SELECT * FROM <table_name> WHERE ID = ".intval($id));

Правильно - сделать подставновку SQL параметров средствами, которые для этого существуют в php. Сейчас постараюсь найти пример...

→ Ссылка