PHP for循环变量未分配

时间:2012-02-03 20:44:16

标签: php for-loop variable-assignment

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

如下所示,$ 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>";
    }

1 个答案:

答案 0 :(得分: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;
}