Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过表达式在SQL语句中动态设置参数_Php_Mysql_Yii2 - Fatal编程技术网

Php 通过表达式在SQL语句中动态设置参数

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,

我目前正在使用Yii2框架(特别是)

我遇到了一个问题,在创建多个表达式语句时无法动态设置参数

$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!这正是我想要的。