SQLSTATE[HY093]:所有参数都正确填写,语法正确


SQLSTATE[HY093]: All parameters are filled properly and the syntax is right?

我收到以下错误:

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

代码如下:

$transactions_sql = "INSERT INTO transactions (usr, service, txn_id, orig_amount, currency, date, description, fee_amt, 
  fee_currency, fee_descr, fee_type, net_amt, status) VALUES ";
$transactions_sql_data = array_fill(0, count($transactions), "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$transactions_sql .= implode(",", $transactions_sql_data);
$stmt = $conn->prepare($transactions_sql);
$i = 1;
foreach ($transactions["data"] as $tr) {
  $stmt->bindValue($i++, $id, PDO::PARAM_INT);
  $stmt->bindValue($i++, $tr["service"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["id"], PDO::PARAM_INT);
  $stmt->bindValue($i++, $tr["amount"], PDO::PARAM_INT);
  $stmt->bindValue($i++, $tr["currency"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["created"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["description"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["fee_details"][0]["amount"], PDO::PARAM_INT);
  $stmt->bindValue($i++, $tr["fee_details"][0]["currency"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["fee_details"][0]["description"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["fee_details"][0]["type"], PDO::PARAM_STR);
  $stmt->bindValue($i++, $tr["net"], PDO::PARAM_INT);
  $stmt->bindValue($i++, $tr["status"], PDO::PARAM_STR);
}
$stmt->execute();

执行var_dump($transactions_sql)打印"INSERT INTO balance_transactions (usr, service, txn_id, orig_amount, currency, date, description, fee_amt, fee_currency, fee_descr, fee_type, net_amt, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?),(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?),(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",这是正确的(就问号数量而言 - $tr数组中只有三个数组(。

事实证明,

我必须添加一个-1才能count($transactions)才能正常工作。看起来它添加了 1 太多的参数集。

以下是有效的方法: $transactions_sql_data = array_fill(0, count($transactions), "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

感谢其他人的帮助!