php - PDOStatement::execute(): SQLSTATE[HY093]: 参数编号无效:绑定(bind)变量的数量与标记的数量不匹配

标签 php mysql pdo

$sql = 'INSERT INTO `' . $table_name . '` '
            . '(`day`, `campaign_name`, `campaign_id`, `views`, `CPM`, `cost`, `currency`, `cost_EUR`) VALUES '
            . '(:day, :campaign_name, :campaign_id, :views, :CPM, :cost, :currency, :cost_EUR)';

$this->_dbi->execute($sql, array(
            ':day'        => $day,
            ':campaign_name'      => $campaignName,
            ':campaign_id'    => $campaignID,
            ':views'          => $views,
            ':CPM'        => $cpm,
            ':cost'     => $cost_EUR,
            ':currency'       => 'EUR',
            ':cost_EUR' => $cost_EUR
));

据我所知,变量的数量确实与标记的数量相匹配。 我只是想不出这里的错误。

最佳答案

你只需要传递一个数组给execute方法。因此,您更新后的代码将如下所示:

$sql = 'INSERT INTO `' . $table_name . '` '
            . '(`day`, `campaign_name`, `campaign_id`, `views`, `CPM`, `cost`, `currency`, `cost_EUR`) VALUES '
            . '(:day, :campaign_name, :campaign_id, :views, :CPM, :cost, :currency, :cost_EUR)';
$sth = $this->_dbi->prepare($sql);    
$sth->execute(array(
            ':day'        => $day,
            ':campaign_name'      => $campaignName,
            ':campaign_id'    => $campaignID,
            ':views'          => $views,
            ':CPM'        => $cpm,
            ':cost'     => $cost_EUR,
            ':currency'       => 'EUR',
            ':cost_EUR' => $cost_EUR
));

在这里阅读更多:http://php.net/manual/en/pdostatement.execute.php

PDOStatement::execute — Executes a prepared statement

Usage: public bool PDOStatement::execute ([ array $input_parameters ] )

Here is the example from the documentation:

<?php
/* Execute a prepared statement by passing an array of insert values */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->execute(array(':calories' => $calories, ':colour' => $colour));

关于php - PDOStatement::execute(): SQLSTATE[HY093]: 参数编号无效:绑定(bind)变量的数量与标记的数量不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34762475/

相关文章:

mysql - 如何正确地将 sql 数据导出到 .csv

PHP MYSQL SELECT 查询参数包含与号(&)

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

php - 当订阅类型为跟踪时如何使用 Stripe 3d Secure 进行授权

php - 如何修复 "Fatal error: Call to undefined function mysqli_connect()"错误?

mysql - 需要一个查询根据另一个表的值对一个表中的值进行排序

MySQL获取平均值

php - 在 PDO 中使用名为 "before"的列名

php - 仅在更新相同记录时通知用户 mysql php

php - yii2 findAll 无法从变量传递参数