与加法连接不能按预期工作

Concatenation with addition in it doesn't work as expected

这是我的 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 之后的第一个 ( 在哪里?

这是因为运算符的优先级。试试 -

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

+. 具有相同的 operator precedence,但左结合。第一次连接后的意思是:

'(' . (int)$data['event_id']

字符串已与您的密钥一起添加,例如

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

因此 string gets converted into an integer in that numerical context 消失了 。要解决此问题,请在您添加的内容周围使用括号 ()