我收到以下错误:
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), "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
感谢其他人的帮助!