Concatenation with addition in it doesn't work as expected

房东的猫 提交于 2019-11-26 08:38:23

问题


Here is my PHP code with SQL query, but the output isn\'t as expected:

$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;

AND I get sql query like this:

`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\")`

Where is the first ( after VALUES?


回答1:


+ and . have the same operator precedence, but are left associative. Means after the first concatenation:

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

The string got added with your key, e.g.

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

So the string gets converted into an integer in that numerical context and disappears. To solve this use parentheses () around your addition.




回答2:


This is happening because of the operator precedence. Try with -

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


来源:https://stackoverflow.com/questions/32311476/concatenation-with-addition-in-it-doesnt-work-as-expected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!