与加法连接不能按预期工作
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 和 消失了 。要解决此问题,请在您添加的内容周围使用括号 ()
。
这是我的 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 和 消失了 。要解决此问题,请在您添加的内容周围使用括号 ()
。