Точка с запятой 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[]' => [1342144]]);
?>

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