2012-02-03 141 views
1

我有一个for循环,将查询结果写入表中。我有一个从查询中的值分配的变量($rID_s)。出于某种原因,它省略了第一次迭代。我有一个查询的总行的变量,它分配正确的数字。我试过设置$i = 0$i = 1,它仍然省略了数组的第一次迭代。如果$i设置为0,则会向表中添加null记录。PHP的循环变量未分配

请参阅下面的内容,$ rID_s的值是在循环的第一次迭代中未分配的变量。在此先感谢:

for ($i=1; $i <= $totalRows_rsClassReg; $i++) { 

     $row = mysql_fetch_array($rsClassReg); 
     $rID_s = $row['class_registry_student_ID_fk']; 

     mysql_select_db($database_SCOPE_test, $SCOPE_test); 
     $sql_aInstance = sprintf("INSERT INTO assignment_registry (assignment_reg_assignment_ID_fk, assignment_reg_student_ID_fk) VALUES (%s, %s)", 
        GetSQLValueString($aID, "int"), 
        GetSQLValueString($rID_s, "int")); 
     $Insert_aInstance = mysql_query($sql_aInstance, $SCOPE_test) or die(mysql_error()); 
     echo $row['class_registry_student_ID_fk'] . " - "; 
     echo "Instanced"; 
     echo "</br>"; 
    } 
+0

你可以输出$ i当你做回声? – 2012-02-03 20:49:17

+0

您是否对两个数据库连接使用相同的用户名/密码组合? – Crontab 2012-02-03 20:51:57

回答

1

您没有提供足够的信息来回答你的问题,所以我要完全左外野你提供这样做的另一种方式,应该让你的问题已经过时了。

有很多事情你可以和应该在这里做不同。想象一下,您对数据库的查询是公交车,而每个查询都是公交车。最好是用更多的数据填满你的公交车,然后再乘坐公交车。

// do this up here 
mysql_select_db($database_SCOPE_test, $SCOPE_test); 

if(! empty($oneDimensionalArrayOfIds)){ 
    $query = " SELECT `col` FROM `table` WHERE (". implode('AND', $oneDimensionalArrayOfIds) .") "; // the 1-D array is getting your r_IDs or whatever 
    $rsClassReg = sqlarr($query); 
    if(! empty($rsClassReg)){ 
     $sqlInserts = NULL; 
     foreach($rsClassReg as $r){ 
      $sqlInserts[] = sprintf("INSERT INTO assignment_registry (assignment_reg_assignment_ID_fk, assignment_reg_student_ID_fk) VALUES (%s, %s)", GetSQLValueString($aID, "int"), GetSQLValueString($rID_s, "int")); 
      // not sure where you are getting AIDs from (africa? har har)... 
     } 
     if(! empty($sqlInserts)){ 
      sqlquery(implode("; ", $sqlInserts)); 
     } 
    } 
} 

这是一个免费赠品 - 很久以前,我曾经使用过这些功能。现在,我使用自定义查询制造商和PDO,为自己节省了大量工作。在这里你去...

function sqlarr($sql, $numass=MYSQL_BOTH) { 
    // MYSQL_NUM MYSQL_ASSOC MYSQL_BOTH 
    $got = array(); 
    $result=mysql_query($sql) or die("$sql: " . mysql_error());        

    if(mysql_num_rows($result) == 0) 
     return $got; 
    mysql_data_seek($result, 0); 
    while ($row = mysql_fetch_array($result, $numass)) { 
     array_push($got, $row); 
    } 
    return $got; 
} 

// Sql fetch assoc 
function sqlassoc($sql){ 
    $query = mysql_query($sql) or die("$sql:". mysql_error()); 
    $row = mysql_fetch_assoc($query); 
    return $row; 
} 

function sqlrow($sql){ 
    $query = mysql_query($sql) or die("$sql:". mysql_error()); 
    $row = mysql_fetch_row($query); 
    return $row; 
} 

function sqlquery($sql){ 
    $query = mysql_query($sql) or die("$sql:". mysql_error()); 
    return $row; 
} 
+0

欢迎来到SO。让我知道这是否适合你说@phpmeh并在这里发表评论。此外,如果它有效或有帮助,请投票回答并用勾号接受它。 – phpmeh 2012-02-03 21:09:26

+0

这肯定帮了我。我在这方面是一个新手,并没有意识到有一个更好的方式来处理这些类型的查询。谢谢您的帮助! – user1188339 2012-02-03 22:46:22

+0

投票并接受。我们在这里 – phpmeh 2012-02-04 01:20:41