php - La concatenación con adición no funciona como se esperaba
string concatenation (2)
Aquí está mi código PHP con consulta SQL, pero el resultado no es el esperado:
$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;
Y obtengo una consulta sql como esta:
`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")`
¿Dónde está el primero
(
después de VALUES?
Esto está sucediendo debido a la precedencia del operador. Probar con
$sql .= ''(''
. ((int)$data[''event_id'']) . '', ''
. ($key + 1) . '', ''
. ((int)$val[''file_id'']) . '', "''
. addslashes($val[''url'']) .
''"), '';
+
y
.
tienen la misma
precedencia de operador
, pero se dejan asociativos.
Medios después de la primera concatenación:
''('' . (int)$data[''event_id'']
La cadena se agregó con su clave, por ejemplo
"($data[''event_id'']" + $key
Entonces la
cadena se convierte en un número entero en ese contexto numérico
y
desaparece
.
Para resolver esto, use paréntesis
()
alrededor de su adición.