2017-03-06 111 views
0

我讀了一堆線程討論這個問題,我無法找到什麼毛病我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,但我無法弄清楚什麼是錯的。請幫助!

+0

U沒有定義你的參數?,?,?,?,?檢查這個鏈接http://php.net/manual/en/pdo.prepared-statements.php – Mario

回答

1

你必須在調用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(); 
+0

這需要是'bindValue',而不是'bindParam'。否則,你將綁定所有參數到'$ c'的最後一個值。 – Barmar

+0

而不是'$ value'而不是'$ c'? – Barmar

+0

'$ sc-> execute()'需要位於'$ arr ['customer']'循環中。 – Barmar

1

如果你想使用關聯數組作爲參數​​,你必須使用指定的佔位符,而不是?。佔位符名稱必須與數組索引匹配。

$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); 
    } 
} 
相關問題