连接中的连接不能按预期工作

时间:2015-08-31 12:37:20

标签: php string concatenation addition

这是我的带有SQL查询的PHP代码,但输出不符合预期:

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

2 个答案:

答案 0 :(得分:2)

+.具有相同的operator precedence,但是保持关联。第一次连接后的含义:

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

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

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

所以string gets converted into an integer in that numerical context消失。要解决此问题,请在添加时使用括号()

答案 1 :(得分:1)

由于运算符优先级,这种情况正在发生。试试 -

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