1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

Точка с запятой MYSQl-запросе

Главные вкладки

Аватар пользователя mmjmm mmjmm 31 августа 2023 в 7:03

Здравствуйте.
Делаю mysql-запрос средствами Друпал:
$query = $database->query("
SELECT id
FROM my_table
WHERE value_1 = 'srt' AND value_2 = '{$value_2}'
");
$result = $query->fetchAll();

где $value_2 содержит набор цифр, букв и точку с запятой.
Из-за точки с запятой выходит ошибка: " ; is not supported in SQL strings. Use only one statement at a time."

Подскажите, пожалуйста, как бороться с проблемой наличия в значениях запроса mysql-символов. При этом заменять эту точку с запятой на пустое значение или строку нельзя. Строка должна остаться в том же виде.

Комментарии

Аватар пользователя kompospec kompospec 2 сентября 2023 в 2:13

<?php
$host
= 'localhost'; // адрес сервера
$db_name = 'database'; // имя базы данных
$user = 'user'; // имя пользователя
$password = 'password'; // пароль

// создание подключения к базе

$connection = mysqli_connect($host, $user, $password, $db_name); // текст SQL запроса, который будет передан базе
$query = 'SELECT * FROM `USERS`'; // выполняем запрос к базе данных
$result = mysqli_query($connection, $query); // выводим полученные данные
while($row = $result->fetch_assoc()){
echo
$row['NAME'];
echo
' - ';
echo
$row['FOOD'];
echo
'<br>';
}
// закрываем соединение с базой
mysqli_close($connection);
?>

Вы это правда не знали?

Аватар пользователя yaro yaro 1 сентября 2023 в 8:50

У друпала есть возможность делать безопасные запросы.
Тут подробнее: https://www.drupal.org/docs/drupal-apis/database-api

Этот запрос должен выглядеть так:

<?php
$result
= $database->select('my_table')
->
fields('my_table', ['id'])
->
condition('value_1', 'srt')
->
condition('value_2', $value_2)
->
execute()
->
fetchAll();
?>
Аватар пользователя bsyomov bsyomov 2 сентября 2023 в 15:39

Лучше делать как предлагает @yaro, но если хочется через $database->query(), то надо не пытаться запихнуть аргументы прямо в текст запроса, а использовать плейсхолдеры для аргументов, а их передавать в массиве вторым аргументом qurey():

<?php
$result
= $database->query("SELECT * FROM {mytable} WHERE id IN (:ids[])", [':ids[]' => [13, 42, 144]]);
?>

Подробнее в документации: https://www.drupal.org/docs/drupal-apis/database-api/static-queries

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /