2013-07-03 92 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