SQLSTATE [HY093]:无效的参数号:参数没有被定义的”
问题描述:
我读了一堆线程讨论这个问题,我无法找到什么毛病我code.I有一个数组:SQLSTATE [HY093]:无效的参数号:参数没有被定义的”
$insert_arr["$key"]['customer']["$cust->Company"]['cpq_id'] = "$cust->CustomerId";
$insert_arr["$key"]['customer']["$cust->Company"]['shop_cart_id'] = "$cust->ShopCartId";
$insert_arr["$key"]['customer']["$cust->Company"]['user_id'] = "$cust->UserId";
$insert_arr["$key"]['customer']["$cust->Company"]['company'] = "$cust->Company";
$insert_arr["$key"]['customer']["$cust->Company"]['crm_id'] = empty("$cust->CRMAccountId") ? 0 : "$cust->CRMAccountId";
过了一会儿,我有:
$q_customer = 'insert into customers
(
cpq_id,
shopping_cart_id,
user_id,
company_name,
crm_id
)
values (?, ?, ?, ?, ?)';
$sc = $db2->prepare($q_customer);
后来还是:
foreach ($insert_arr as $id => $arr) {
foreach($arr['customer'] as $c) {
$sc->execute($c);
}
}
我总是在T得到引用的错误书名。我以前从未使用PDO,但我无法弄清楚什么是错的。请帮助!
答
你必须在调用execute方法之前绑定你的参数。你的数组也是第三维类型,所以你需要添加一个foreach。
像这样:
foreach ($insert_arr as $id => $arr) {
foreach($arr['customer'] as $c) {
$params = array();
foreach($c as $param => $value) {
$params[] = $value;
}
$sc->execute($params);
}
}
$sc->execute();
答
如果你想使用关联数组作为参数,你必须使用指定的占位符,而不是?
。占位符名称必须与数组索引匹配。
$q_customer = 'insert into customers (cpq_id, shopping_cart_id, user_id, company_name, crm_id) values (:cpq_id, :shop_cart_id, :user_id, :company, :crm_id)';
$sc = $db2->prepare($q_customer);
foreach ($insert_arr as $id => $arr) {
foreach($arr['customer'] as $c) {
$sc->execute($c);
}
}
U没有定义你的参数?,?,?,?,?检查这个链接http://php.net/manual/en/pdo.prepared-statements.php – Mario