dongyan7988 2017-03-28 03:54
浏览 139
已采纳

我一直得到无效的参数号:数字或绑定变量不是yii2中的数学标记数

I am doing a simple update in yii2 controller inside of a for loop. When doing so I keep getting sql error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

My code is below:

for($x = 0; $x < $existingProductCount; $x++)
        {
            $connection = Yii::$app->db;
            $params = [
                ':idcampaign_products' => intval(Yii::$app->request->post("idcampaign_product")[$x]),
                ':existing_products' => intval(Yii::$app->request->post("dynamicExistingProducts")[$x]),
                ':existing_billing_cycle' => Yii::$app->request->post("dynamicExistingBillingCycle")[$x],
                ':existing_trial_length' => Yii::$app->request->post("dynamicExistingTrialLength")[$x],
                ':existing_trial_price' => Yii::$app->request->post("dynamicExistingTrialPrice")[$x],
                ':existing_reg_price' => Yii::$app->request->post("dynamicExistingRegPrice")[$x]
            ];
            $connection->createCommand()
            ->update('campaign_products',
                [
                    'product_id'=>$params[':existing_products'],
                    'campaign_billing_cycle'=>$params[':existing_billing_cycle'],
                    'trial_length'=>$params[':existing_trial_length'],
                    'trial_price'=>$params[':existing_trial_price'],
                    'regular_price'=>$params[':existing_reg_price']
                ],
                'idcampaign_products=:idcampaign_products')
            ->bindValues($params)
            ->execute();
            //var_dump($params);

        }
  • 写回答

1条回答 默认 最新

  • donmqryh49993 2017-03-28 06:32
    关注

    You are not doing this properly. When you use query builder with an array you don't have to bound values - it's done automatically. With your code only :idcampaign_products needs to be bound and since you pass 6 values that is why the error pops.

    Do it like that:

    $connection->createCommand()
        ->update('campaign_products', [
            'product_id' => $params[':existing_products'],
            'campaign_billing_cycle' => $params[':existing_billing_cycle'],
            'trial_length' => $params[':existing_trial_length'],
            'trial_price' => $params[':existing_trial_price'],
            'regular_price' => $params[':existing_reg_price']
        ], ['idcampaign_products' => $params[':idcampaign_products']])
        ->execute();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料