2013-07-03 75 views
2

1.)你可以在while循環中嵌套一個msqli_query嗎?在WHILE循環中的mysqli查詢

2.)如果是,爲什麼下面的PHP沒有向precords表寫入任何數據?

如果我回顯一個$ build數組變量,它會正確顯示,但mysqli插入沒有向數據庫中的表寫入任何內容。代碼不會在任何地方出錯,所以我錯過了什麼?

$data = mysqli_query($con,"SELECT * FROM Cart WHERE Buyer_ID='$_SESSION[cid]' AND Cart_Date='$_SESSION[cdate]'"); 
while($build = mysqli_fetch_array($data)) 
{ 
//echo $build[idex]."<br>"; 
mysqli_query($con,"INSERT INTO precords (precord,Buyer_ID,Account,Purchase_Date,Item_Number,Item_Qty,Item_Title,Item_FPrice,Item_FFLFlag,ccpass) VALUES ('$build[idex]','$build[Buyer_ID]','$build[Cart_Date]','$build[Item_Number]','$build[Item_Qty]','$build[Item_Title]','$build[Item_FPrice]','$build[Item_FFLFlag]','N')"); 
}; 

感謝您的任何幫助。

** P.S. - 此代碼旨在將某些值從TEMPORARY表/會話變量移至永久記錄表,但由於購物車中有多個產品與用戶/會話相關聯,因此需要循環。

+0

是的,你可以做一個循環,但你不需要。你的'INSERT'只使用'$ build'中的值,所以你可以做'INSERT INTO precords SELECT col1,col2,col3 ... FROM Cart WHERE Buyer_ID = ...' –

+2

有很多原因可能會失敗,其中最重要的事實就是您不會在'$ build'中轉義值,即使它們來自數據庫,它也是不安全的。你可能有語法錯誤。您應該檢查'mysqli_error()'來查看出了什麼問題,並最終考慮切換到MySQLi中的預準備語句。 –

回答

1

是的,你可以在一個循環中使用它,

你可能想添加mysql_error()功能找出什麼地方錯了,並嘗試修復它或將通過添加錯誤的問題,所以我們可以告訴你該怎麼做

$data = mysqli_query($con,"SELECT * FROM Cart WHERE Buyer_ID='$_SESSION[cid]' AND Cart_Date='$_SESSION[cdate]'"); 
    while($build = mysqli_fetch_array($data)) 
    { 
    //echo $build[idex]."<br>"; 
    mysqli_query($con,"INSERT INTO precords 
    (precord,Buyer_ID,Account,Purchase_Date,Item_Number,Item_Qty,Item_Title,Item_FPrice,Item_FFLFlag,ccpass) 
    VALUES 
    ('$build[idex]','$build[Buyer_ID]','$build[Cart_Date]','$build[Item_Number]','$build[Item_Qty]','$build[Item_Title]','$build[Item_FPrice]','$build[Item_FFLFlag]','N') 
    ") or die (mysql_error()); 
     }; 
+0

添加了mysql_error,但它沒有報告/顯示錯誤 - 話雖如此,後來的代碼塊現在不起作用,所以OR DIE似乎被觸發。我會試着弄清楚具體的錯誤 – DMSJax

+3

因爲這是'mysqli'而不是'mysql'。您需要'mysqli_error($ con)'來代替。 –

+0

@MichaelBerkowski在發表評論後,我發現了這一點。謝謝 – DMSJax