2017-03-06 109 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); 
    } 
} 
相关问题