@xenonhammer

Как правильно оформить экранирование в запросе к mysql?

Здравствуйте! При формировании запроса к MySQL, столкнулся с проблемой ковычек.

Собираю строку запроса, используя код ниже:
Формирование строки

$query_string_category_name = "INSERT INTO `oc_testtest`(`name`) VALUES "; //Первая часть запроса.
		foreach($data as $k => $v){
			foreach($v as $k1 => $v1){
				if($v1['name'] !== NULL){                                // Если обкект не пустой, то добавить в запрос "(".
					$query_string_category_name .= "(";                              //Вторая часть запроса.
				}
				$query_string_category_name .= mysqli_real_escape_string($connect_bd, ($v1['name'])); //Третья часть запроса. Сам объект. Экранируем  ковычки
				
				if($v1['name'] !== NULL){                                // Если объект не пустой, то дабавить в запрос ")".
					$query_string_category_name .= ")";                              //Четвертая часть запроса. 
				}
				if ($k1+1 < count($v)) {                               // Если общее количество ключей меньше текущего, то поставить.
					$query_string_category_name .= ", ";                             //Пятая часть запроса.
				}
				// $query_string_category_name .=  "ON DUPLICATE KEY UPDATE `name`";    //Обновляем дубликаты
			}	
		}
		// $res_name = mysqli_query($connect_bd, $query_string_category_name);               // Обращение к базе данных с запросом.	
		print_r($query_string_category_name);


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

Вот как выглядит запрос в самом MySQL:
5e30025dc5db9899573339.jpeg

Как видите проблема в ковычках. Решил экранировать. Но почему нет толку?
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
@xenonhammer Автор вопроса
$query_string_category_name .= "'" . ($v1['name']) . "', ";

Вот что прокатило.
Я же собирал строчку для инсерта, можно было просто в запросе к базе эти кавычки поставить, а не в переменную
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Про кАвычки при работе с БД надо ЗАБЫТЬ НАВСЕГДА.
И всегда использовать только вопросительный знак.

$stmt = $connect_bd->prepare("INSERT INTO `oc_testtest`(`name`) VALUES (?)");
$stmt->bind_param("s", $name);
$connect_bd->begin_transaction();
foreach($data as $chunk){
    foreach($chunk as $row){
        if ($row['name']) {
            $name = $row['name'];
            $stmt->execute();
        }
    }
}
$connect_bd->commit();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы