【问题标题】:PDOStatement::execute(): SQLSTATE[HY093] , strange behavour during bulk insertPDOStatement::execute(): SQLSTATE[HY093] ,批量插入期间的奇怪行为
【发布时间】:2018-03-03 15:24:31
【问题描述】:

有人可以帮忙吗?我正在尝试进行批量插入(400 行),每次在数据库中插入 58 行后显示错误消息,我尝试了不同的数据集,它的行为方式相同。

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

代码如下:

$rows = $_POST['myTableArray'];
$nrecuser= $_SERVER['REMOTE_ADDR'];
$ndatetime= date('Y-m-d G:i:s');

$sql = "INSERT INTO dbo.rec(ncode, nname, nprimary, ndate, nyear, nperiod, 
                            nref, ntype, nuser, ncategorycode1, ncategorycode2, 
                            ncategorycode3, namount, ndescription, naccount, 
                            nmajorheadcode, ncheck, nrecuser, ndatetime) 
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

include_once dirname(__FILE__) . '/includes/db.inc.php';

try
{
  $conn->beginTransaction();

  $stmt = $conn->prepare($sql);

  foreach($rows as $row)
  {
    array_push($row, $nrecuser, $ndatetime);
    $stmt->execute($row);

  }

  $conn->commit();
  exit();
}
catch (PDOException $e)
{ 
 $conn->rollback();
  echo $e;
  exit();
}

【问题讨论】:

  • 您是否尝试查看您在数组中传递的数据。也许第 59 行有一些奇怪的地方。很可能它没有正确数量的参数

标签: php pdo


【解决方案1】:

给定的插入查询参数的数量不等于您传递给插入的值

【讨论】:

  • 对不起,我忘记了一行代码(现已更新),$rows 有 17 个元素 + 2 个来自 Array_push,总共 19 个,我数了很多次。它设法插入前 58 行,但其余的都失败了。
【解决方案2】:

原来是服务器端问题,我只需要更新 php.ini max_input_vars 设置。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多