Вот мой PHP-код с SQL-запросом, но вывод не так, как ожидалось:
$sql = 'INSERT INTO `event_footers` (`event_id`, `order`, `file_id`, `url`) VALUES '; foreach($all_footers as $key => $val){ $sql .= '('.(int)$data['event_id'].', '.$key + 1 .', '.(int)$val['file_id'].', "'.addslashes($val['url']).'"), '; } $sql = rtrim($sql, ', '); var_dump($sql); exit;
И я получаю sql-запрос следующим образом:
`INSERT INTO `event_footers` (`event_id`, `order`, `file_id`, `url`) VALUES 1, 2135, "http://11.lt"), 1, 2136, "http://22.lt"), 1, 2140, "http://44.lt")`
Где первый (
после VALUES?
+
и .
имеют тот же приоритет оператора , но остаются ассоциативными. Средства после первого конкатенации:
'(' . (int) $ data ['event_id']
Строка добавлена с вашим ключом, например
"($data['event_id']" + $key
Таким образом, строка преобразуется в целое число в этом числовом контексте и исчезает . Чтобы решить эту проблему, используйте круглые скобки ()
вокруг вашего добавления.
Это происходит из-за приоритета оператора. Попробуйте –
$sql .= '(' . ((int)$data['event_id']) . ', ' . ($key + 1) . ', ' . ((int)$val['file_id']) . ', "' . addslashes($val['url']) . '"), ';