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 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的