2017-01-15 2 views
-4

Я просто (очень запоздало, я знаю), обновляю часть своего кода от mysql до mysqli, и я заметил, что похоже на изменение поведения в fetch_array.mysql_fetch_array/mysqli_fetch_array - разница в поведении при первом вызове (php)

Не было намерения обфускации путем усечения кода в исходном вопросе, но здесь, если это помогает, это более полный пробег фактического кода.

ИСПОЛЬЗОВАНИЯ: MYSQL

ЭТО проходит через каждую Квалифицируйтесь запись в таблице от первого до последнего

$con_head = mysql_connect($domain,$head_dbname,$head_dbpassword); 
if (!$con_head) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db($head_dbname, $con_head); 


$src_sql = "Select * from SEQUENCES where SEQUENCE_TYPE = 'N' and REVIEWED ='N' order by SEQ_START"; 
$src_tb = mysql_query($src_sql, $con_head); 

while ($src_rec = mysql_fetch_array($src_tb)) 
{ 
    ..... statements here have no relevance to the problem 

} 

ИСПОЛЬЗОВАНИЯ Mysqli

** Это немедленно SKIPS этого времени CLAUSE **

ЕСЛИ СКОРОСТЬ НЕДАВНО ВЫШЕ, КОГДА НЕ РАСПРОСТРАНЯЕТСЯ - ЭТО ПРОИЗВОДИТ, НО ЗАПУСТИТЬ ИЗ ВТОРОЙ ЗАПИСИ.

$con_head = mysqli_connect("$domain,$head_dbname,$head_dbpassword,$head_dbname); // database name and user name are the same 
if (!$con_head) 
    { 
    die('Could not connect: ' . mysqli_error()); 
    } 
    $src_sql = "Select * from SEQUENCES where SEQUENCE_TYPE = 'N' and REVIEWED ='N' order by SEQ_START "; 
$src_tb = mysqli_query($con_head, $src_sql); 
// $src_rec = mysqli_fetch_array($src_tb,MYSQLI_BOTH); 
while ($src_rec = mysqli_fetch_array($src_tb,MYSQLI_BOTH)) 
{ 
    ..... statements here have no relevance to the problem 

}   

Это прекрасно работает под MySQL, но эквивалент под Mysqli сразу проваливает "а" тест.

Я проверил, что в противном случае код в порядке, добавив дополнительный mysqli_fetch_array перед началом цикла, это отлично работает, хотя и запускает обработку из SECOND-записи.

Понятно, что я могу переписать свой код на цикл по-другому (например, имея $ record = mysqli_fetch_array перед циклом, имея цикл тестирования $ record, а затем дополнительную $ record = mysqli_fetch_array до конца фигурной скобки в цикле while), но я очень хочу понять разницу в поведении, чтобы я не сталкивался с какими-либо другими подводными камнями.

Может ли кто-нибудь объяснить?

+1

Вам нужно будет опубликовать то, что вы использовали точно с помощью функции 'mysqli_'. и это неправильно 'mysql_query ($ con, $ sql)' –

+0

этот код, который вы отправили; не содержит воды –

+0

«эквивалент при mysqli» - Какой эквивалент? Покажите нам [mcve], который демонстрирует проблему, а не какой-то код, который, как вы знаете, нет. – Quentin

ответ

2

Нет никакой разницы.

Обе функции ведут себя одинаково всеми возможными способами.

Какую бы разницу вы ни заметили, вызвана вашей собственной ошибкой.

Смежные вопросы