2013-03-02 35 views
0

行,所以我有一個問題,我需要的產品ID的數組傳遞給我的sql語句下面我如何通過一個數組MySQL的聲明

$index = 0; 
    $products = $cart->get_products(); 
    for ($i=0, $n=sizeof($products); $i<$n; $i++) { 
    $prod = $products[$index]['id']; 

if (strpos($prod,"{")){ 
$product = preg_split("^[{}]^",$prod); 
}else{ 
$product = $prod; 
} 
} 
$product_query = tep_db_query("select cb.products_id, SUM(cb.customers_basket_quantity),SUM(p.products_rate) from " . TABLE_PRODUCTS . " p INNER JOIN " . TABLE_CUSTOMERS_BASKET . " cb ON p.products_id = cb.products_id 
WHERE cb.customers_id ='" . $customer_id ."' 
AND p.products_id IN '".$product ."' 
"); 

結果總是

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Array'' at line 3 

從產品p INNER JOIN中選擇cb.products_id,SUM(cb.customers_basket_quantity),SUM(p.products_rate)customers_basket cb ON p.products_id = cb.products_id WHERE cb.customers_id ='3'AND p.products_id IN'Array'

+0

你能給我們var_dump($ product)嗎? – MIIB 2013-03-02 19:34:01

+0

語法錯了。你需要實現的是...... WHERE p.products_id IN(1,2,3,4)'。通過將數組傳遞給字符串,只有'Array'將被插入。 – 2013-03-02 19:34:10

+0

數組返回1 {4} 1 {3} 5對於某些具有與它們相關的選項的產品,所以我猜是我該如何分隔第一個字符? 1通過我的產品ID – user1493559 2013-03-02 19:34:10

回答

0

make it li柯本IN (1, 2, 3, 4, 5)使用implode(',', $product);

2

(非常小心你什麼插入到你的SQL,如果你自己做它(而不是PDO PARAMS等)!)

確保$產品是陣列:

$product = (array)$product; 

然後逃脫其值:

$product = array_map('your_db_escape_function', $product); 

然後字符串化它:

$product = "'" . implode("', '", $product) . "'"; 

然後將其添加到查詢:

"... p.products_id IN (" . $product . ")" 

你的代碼編輯後,我想這是你想要什麼:

$products = $cart->get_products(); 
$productIds = array_map(function($product) { 
    return (int)$product['id']; 
}, $products); 
$productIds = implode(', ', $productIds); 

$query = tep_db_query(" 
    select cb.products_id, SUM(cb.customers_basket_quantity),SUM(p.products_rate) 
    from " . TABLE_PRODUCTS . " p 
    INNER JOIN " . TABLE_CUSTOMERS_BASKET . " cb ON p.products_id = cb.products_id 
    WHERE cb.customers_id ='" . $customer_id ."' 
    AND p.products_id IN (" . $productIds . ") 
"); 
+0

確定已修改的代碼 – user1493559 2013-03-02 19:55:17

0

確定了它!這是一個變量,我需要它現在讀取

$id = $this->rate($id); 
    $qty = $cart->count_contents($id); 

它返回在我的公式中正確的數量!

+0

但不適用於多種產品的前1產品有1個統一費率的運輸另一種產品有免費送貨,所以我想運費反映此 – user1493559 2013-03-02 21:27:35