PHP – функция для mysql_fetch_assoc

Если я делаю это в PHP, он работает нормально и петли, как ожидалось:

$rs = mysql_query($sql); while ($row = mysql_fetch_assoc($rs)){ writeme("UserID: " . $row["UserID"]); } 

Но я все время хочу отвлечь это на функцию, которую я назвал ExecuteQuery:

 function ExecuteQuery($sql){ $result = mysql_query($sql); if ($result) { if($result != 1){ return mysql_fetch_assoc($result); // return recordset } }else{ $message = 'Invalid query: ' . mysql_error() . "<br>"; $message .= 'Whole query: ' . $sql; echo $message; die(); } 

}

Эта функция отлично работает в 2 из 3 сценариев:

1- Отлично подходит для запроса, который возвращает 1 строку, и я могу получить доступ к этому:

$ rs = ExecuteQuery ($ sql);

$ foo = $ rs ["UserID"];

2- Отлично работает для оператора sql, который не возвращает никаких записей, например UPDATE или DELETE.

3- Но когда я пытаюсь вернуть набор записей, который возвращает несколько записей, а затем прокручивать его, я получаю бесконечный цикл, и мой браузер падает. Как это:

 $rs = ExecuteQuery($sql); while ($row = $rs){ writeme("UserID: " . $row["UserID"]); } 

Как я могу изменить цикл while, чтобы он продвигался к каждой новой записи в наборе записей и останавливался после последней записи? Я уверен, что это глупая мелочь, но я пока еще не специалист по PHP. Мне бы очень хотелось, чтобы моя функция ExecuteQuery могла обрабатывать все 3 сценария, это очень удобно.

mysql_fetch_assoc () возвращает только одну строку результата. Чтобы получить следующую строку, вам нужно снова вызвать mysql_fetch_assoc (). Единственное, что вы могли бы сделать, это вернуть функцию ExecuteQuery массив массивов:

 $rows = array(); while ($row = mysql_fetch_assoc($result) !== false) { $rows[] = $row; } return $rows; 

Кроме того, вы не должны использовать функции mysql_ *, поскольку они устарели. Вместо этого попробуйте использовать PDO или mysqli_ *.

попробуйте foreach($rs as $row){ вместо while ($row = $rs){

Не используйте пока, используйте foreach:

 $rs = ExecuteQuery($sql); foreach ($rs as $row){ writeme("UserID: " . $row["UserID"]); }