как предотвратить эту ошибку: Предупреждение: mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом, булевская переменная, данная в … на строке 11 [дубликат]

7
задан Community 23 May 2017 в 12:26
поделиться

6 ответов

Вот правильный способ сделать что-то:

<?PHP
$sql = 'some query...';
$result = mysql_query($q);

if (! $result){
   throw new My_Db_Exception('Database error: ' . mysql_error());
}

while($row = mysql_fetch_assoc($result)){
  //handle rows.
}

Обратите внимание на проверку (! $ Result) - если ваш $ result является логическим, он определенно ложен, и это означает, что произошла ошибка базы данных, что означает, что ваш запрос был наверное плохо.

13
ответ дан 6 December 2019 в 21:09
поделиться

Правильный синтаксис (в примере):

$query = mysql_query('SELECT * FROM beer ORDER BY quality');
while($row = mysql_fetch_assoc($query)) $results[] = $row;
0
ответ дан 6 December 2019 в 21:09
поделиться

Вы должны проверить, является ли результат, возвращаемый mysql_query, ложным.

$r = mysql_qyery("...");
if ($r) {
  mysql_fetch_assoc($r);
}

Вы можете использовать @mysql_fetch_assoc($r), чтобы избежать отображения ошибки.

1
ответ дан 6 December 2019 в 21:09
поделиться

Вот как вы должны использовать mysql_fetch_assoc ():

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
    // Do stuff with $row
}

$ result должен быть ресурсом. Даже если запрос не возвращает строк, $ result все равно остается ресурсом.Единственный случай, когда $ result является логическим значением, - это если при запросе к базе данных произошла ошибка. В этом случае вы должны выяснить, что это за ошибка, с помощью mysql_error () и убедиться, что она не может произойти . Тогда вам не нужно прятаться от ошибок.

Вы всегда должны указывать на то, что ошибки могут произойти, выполнив:

if (!$result) {
    die(mysql_error());
}

По крайней мере, тогда вы с большей вероятностью исправите ошибку, а не оставите пользователей с вопиющей уродливой ошибкой. в их лицо.

0
ответ дан 6 December 2019 в 21:09
поделиться

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

Хотя сообщения об ошибках требуют правильной обработки. Обычно вам не нужно предпринимать никаких специальных действий, чтобы избежать появления таких сообщений об ошибках. Просто оставьте свой код нетронутым. Но если вы не хотите, чтобы это сообщение об ошибке отображалось пользователю, просто выключите его. Не само сообщение об ошибке, а отправка его пользователю.

ini_set('display_errors',0);
ini_set('log_errors',1);

или даже лучше на уровне .htaccess / php.ini
И пользователь никогда не увидит никаких сообщений об ошибках. Хотя вы все равно сможете увидеть это в журнале ошибок.
Обратите внимание, что error_reporting в обоих случаях должен быть максимальным.

Чтобы предотвратить появление этого сообщения, вы можете проверить результат mysql_query и запустить fetch_assoc только в случае успеха.
Но обычно его никто не использует, так как может потребоваться слишком много вложенных if.
Но тоже может быть решение - исключения!

Но это все же не обязательно. Вы можете оставить свой код как есть, потому что он должен работать без ошибок.

Использование return - еще один способ избежать вложенных сообщений об ошибках. Вот фрагмент моей функции обработки базы данных:

  $res = mysql_query($query);
  if (!$res) {
    trigger_error("dbget: ".mysql_error()." in ".$query);
    return false;
  }
  if (!mysql_num_rows($res)) return NULL;

  //fetching goes here
  //if there was no errors only
0
ответ дан 6 December 2019 в 21:09
поделиться

Если вы просто хотите подавить предупреждения от функции, вы можете добавить впереди знак @ :

<?php @function_that_i_dont_want_to_see_errors_from(parameters); ?>
-2
ответ дан 6 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: