这是我的带有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之后的第一个(
在哪里?
答案 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']) .
'"), ';