Php 通过表达式在SQL语句中动态设置参数
我目前正在使用Yii2框架(特别是) 我遇到了一个问题,在创建多个表达式语句时无法动态设置参数Php 通过表达式在SQL语句中动态设置参数,php,mysql,yii2,Php,Mysql,Yii2,我目前正在使用Yii2框架(特别是) 我遇到了一个问题,在创建多个表达式语句时无法动态设置参数 $citiesArray = explode("Chicago", "New York", "Dallas"); foreach ($citiesArray as $index => $city) { $expression = new Expression( 'JSON_CONTAINS( field_location_addressLocation,
$citiesArray = explode("Chicago", "New York", "Dallas");
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
'JSON_CONTAINS(
field_location_addressLocation,
:city,
\'$.parts.city\'
)',
[':city' => json_encode($city)]
);
array_push($cityExpressions, $expression);
};
这里的问题是,:city
只是在每次迭代进行时被替换,最终,SQL语句转换为只关心最后通过的城市(在本例中为“Dallas”)
我曾尝试合并循环索引以创建唯一值,但没有这样的运气:
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
'JSON_CONTAINS(
field_location_addressLocation,
\':city-$index\',
\'$.parts.city\'
)',
[':city-'.$index => json_encode($city)]
);
array_push($cityExpressions, $expression);
};
如果可能的话?我认为这与其说是一个Yii问题,不如说是一个mySQL(MariaDB)问题,因为这些表达式最终会转换为SQL语句
$citiesArray = explode("Chicago", "New York", "Dallas");
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
'JSON_CONTAINS(
field_location_addressLocation,
:city,
\'$.parts.city\'
)',
[':city' => json_encode($city)]
);
array_push($cityExpressions, $expression);
};
如有任何见解,将不胜感激
(我正在使用此处显示的param文档:)关于替换参数,您是对的-参数名称应该是唯一的。但是您没有正确地构建表达式字符串-变量插值将仅对
“
内的字符串有效。如果使用”
,则$index
将不会被视为$index
变量内的值,而是视为文本字符串$index
。请尝试以下操作:
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
"JSON_CONTAINS(
field_location_addressLocation,
':city$index',
'\$.parts.city'
)",
[':city' . $index => json_encode($city)]
);
$cityExpressions[] = $expression;
};
天才-谢谢@rob006!这正是我想要的。