PHP для переменных цикла не назначен - PullRequest
1 голос
/ 04 февраля 2012

У меня есть цикл 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 Ответ

1 голос
/ 04 февраля 2012

Вы не предоставили достаточно информации, чтобы ответить на ваш вопрос, поэтому я собираюсь полностью оставить вас в поле и предоставить другой способ сделать это, чтобы ваш вопрос устарел.

Есть много вещейВы могли бы и должны делать по-другому здесь.Представьте, что ваши запросы к вашей базе данных - это автобус, а каждый запрос - это поездка на автобусе.Лучше заполнить свой автобус большим количеством данных, чем совершать несколько поездок на автобусе.

// 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;
}
...