簡體   English   中英

SQLSTATE [HY093]:參數號無效:參數未定義'

[英]SQLSTATE[HY093]: Invalid parameter number: parameter was not defined'

我讀過很多討論此問題的線程,但我找不到我的代碼有什么問題,我有一個數組:

    $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);
    }
}

而且我總是得到標題中引用的錯誤。 我以前從未使用過PDO,也無法弄清楚出了什么問題。 請幫助!

您必須先綁定參數,然后才能調用execute方法。 您的數組也是第3維類型,因此您將需要添加一個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();

如果要使用關聯數組作為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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM