【问题标题】:PHP for loop variables unassignedPHP for循环变量未分配
【发布时间】:2012-02-26 11:01:26
【问题描述】:

我有一个将查询结果写入表的 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>";
    }

【问题讨论】:

  • 在做 echo 的时候可以输出 $i 吗?
  • 您是否对两个数据库连接使用相同的用户名/密码组合?

标签: php for-loop variable-assignment


【解决方案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;
}

【讨论】:

  • 欢迎来到 SO。通过说@phpmeh 并在此处发表评论,让我知道这是否适合您。此外,如果它对您有用或对您有帮助,请对答案进行投票并用复选标记接受。
  • 这绝对帮助了我。我是这方面的新手,并没有意识到有更好的方法来处理这些类型的查询。感谢您的帮助!
  • 另外,那个 sql 插入写得不好。 “插入(cols)VALUES”部分应该不在foreach中,而不是你可以用逗号(我认为)分隔符来分解每个“('values')”
猜你喜欢
  • 2016-07-30
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
相关资源
最近更新 更多