Конкатенация с добавлением в него не работает, как ожидалось

Вот мой 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")`

Где первый ( после значения?

-2

Решение

+ а также . имеют те же приоритет оператора, но остаются ассоциативными. Средства после первой конкатенации:

'(' . (INT) $ данных [ 'event_id']

Строка была добавлена ​​с вашим ключом, например,

"($data['event_id']" + $key

Итак Строка преобразуется в целое число в этом числовом контексте а также исчезает. Чтобы решить эту проблему, используйте скобки () вокруг вашего дополнения.

2

Другие решения

Это происходит из-за приоритета оператора. Попробуйте с —

$sql .= '('
. ((int)$data['event_id']) . ', '
. ($key + 1) . ', '
. ((int)$val['file_id']) . ', "'
. addslashes($val['url']) .
'"), ';
1

По вопросам рекламы [email protected]