而数据库循环在foreach数组循环中。PHP/MYSQL

而数据库循环在foreach数组循环中。PHP/MYSQL,php,mysql,Php,Mysql,下面的脚本工作正常,但仅适用于数组中的第一条记录 $codes = array(1,2,3,4,5,6,7,8,9,10); // demo for this question, i actually have 1000+ $con = mysql_connect("localhost","user","pass"); if (!$con) { die('Could not connect1: ' . mysql_error()); } $con2 = mysql_select_db("

下面的脚本工作正常,但仅适用于数组中的第一条记录

$codes = array(1,2,3,4,5,6,7,8,9,10); // demo for this question, i actually have 1000+ 
$con = mysql_connect("localhost","user","pass");
if (!$con)
 {
 die('Could not connect1: ' . mysql_error());
 }
$con2 = mysql_select_db("db", $con);
 if (!$con2)
 {
 die('Could not connect2: ' . mysql_error());
 }

 $productsid = "select `products_id` from `coupons_products` where    `coupons_id`=58386264";
 $productsquery = mysql_query($productsid);

 foreach ($codes as $code) {
 while ($productid = mysql_fetch_assoc($productsquery)){
 $sql = "insert into discount_coupons_to_products values (
            '$code', 
            '{$productid['products_id']}')";
                    $con4 = mysql_query($sql);
        if (!$con4)
 {
 die('Could not connect4: ' . mysql_error());
 }
        }


 } // end foreach

我从数据库中获得了一系列代码,这些代码只需要应用于特定的产品(与58386264相同)。代码可以工作,但只适用于数组中的第一个优惠券($codes)。

如果我理解它的意思,您将需要在foreach中的每一步都运行mysql\u query命令,而不是像实际操作那样只运行mysql\u fetch\u assoc。

请使用表进行测试,不要直接运行它。你可以把一切搞糟。我备份了数据库,但谢谢你的建议。修复了,谢谢。你能解释一下原因吗?该查询在循环中是否相同?它就像一个游标,每次调用fetch_assoc时,都会转到下一行。所以,对于每个代码,您将运行一些行,对吗?对于从主数组中获得的每一个新代码,您将再次需要每一行。这是因为您需要再次使用mysql_查询,对于从游标读取的每个代码,您都需要再次使用所有结果集。(对不起,我的英语很差,不管怎样=P,我希望你能理解我试图解释的内容)好的,我想我明白了。因此,当代码返回到foreach循环的开始时,fetch_assoc游标已经在末尾了。在foreach循环中,尝试使用“mysql\u data\u seek(0)”,而不是再次使用mysql\u查询。这样,您将不会再次加载数据库,但内存,这是一种快速的方式,因为您的光标将返回到第一个结果。请在此处阅读更多信息: