10

Ошибка: mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows и др. ожидают ресурс в качестве параметра 1

12

Я пытаюсь извлечь данные из таблицы MySQL, но получаю одно из следующих сообщений об ошибке:

mysql_fetch_array() expects parameter 1 to be resource, boolean given

Вот мой код:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

Я не могу понять, в чем проблема. Помогите, пожалуйста!

5 ответ(ов)

1

Ошибка возникла здесь из-за использования одинарных кавычек ('). Вы можете переписать ваш запрос следующим образом:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string($username)."'
");

Этот код использует mysql_real_escape_string для предотвращения SQL-инъекций. Однако стоит отметить, что для более современных версий PHP (5.5.0 и выше) рекомендуется использовать расширения MySQLi или PDO_MYSQL, так как они обеспечивают лучшую безопасность и функциональность. Но для старых версий mysql_real_escape_string будет работать.

0

Чтобы исправить ваш запрос, необходимо заключить переменную $username в кавычки. Строковые значения, в отличие от числовых, должны быть заключены в кавычки.

Ваш исправленный код должен выглядеть так:

$result = mysql_query("SELECT * FROM Users WHERE UserName = '$username'");

Кроме того, нет смысла использовать условие LIKE, если вы не применяете подстановочные знаки. Если вам нужно точное совпадение, лучше использовать оператор = вместо LIKE.

0

Пожалуйста, убедитесь, что база данных выбрана, так как иногда она может не быть активной.

Перед выполнением запроса к MySQL добавьте следующую проверку:

mysql_select_db('имя_базы_данных') or die('База данных недоступна!');

После этого можете переходить к следующему шагу:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if ($result === FALSE) {
    die(mysql_error());
}

Обратите внимание, что в вашем коде есть небольшая ошибка в конструкции LIKE. Не забудьте обернуть переменную $username в кавычки для корректного выполнения SQL-запроса.

Также имейте в виду, что функции mysql_* устарели. Рекомендуется использовать расширение mysqli или PDO для работы с базой данных.

0

Ваш код должен выглядеть примерно так:

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("Сообщение об ошибке для пользователя")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

После выполнения этого кода, у вас будет напечатан SQL-запрос на экране. Попробуйте выполнить этот запрос на вашем сервере и посмотрите, дает ли он ожидаемые результаты. Чаще всего ошибка кроется в самом запросе. Остальная часть кода правильная.

0

Ваш запрос содержит ошибку, связанную с использованием одинарных кавычек для определения строки. В PHP строки, заключенные в одинарные кавычки, не поддерживают интерполяцию переменных. Чтобы правильно использовать переменную $username в вашем SQL-запросе, вам необходимо либо использовать двойные кавычки, либо конкатенацию строк. Например, вот так:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

Обратите внимание на то, что мы добавили одинарные кавычки вокруг переменной $username, чтобы её значение корректно интерполировалось в строку SQL.

Кроме того, стоит проверить, действительно ли функция mysql_query вернула корректный ресурс результата. Если вы не проверите это, функции получения данных, такие как mysql_fetch_array, mysql_num_rows и т.д., не смогут работать, так как результат будет невалидным. Вот пример с проверкой:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if ($result === FALSE) {
   trigger_error('Запрос не удался, ошибка: ' . mysql_error(), E_USER_ERROR);
} else {
   while ($row = mysql_fetch_array($result)) {
      echo $row['username'];
   }
}

Для получения дополнительной информации вы можете обратиться к документации PHP.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь