mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows и т. д.… ожидает, что параметр 1 будет ресурсом или результатом

900

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

mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, boolean

или

mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, boolean given

или

Вызов функции-члена fetch_array() для логического/не-объекта

Это мой код:

$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'];
}

То же самое относится к коду вроде

$result = mysqli_query($mysqli, 'SELECT ...');
// mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
while( $row=mysqli_fetch_array($result) ) {
    ...

а также

$result = $mysqli->query($mysqli, 'SELECT ...');
// Call to a member function fetch_assoc() on a non-object
while( $row=$result->fetch_assoc($result) ) {
    ...

а также

$result = $pdo->query('SELECT ...', PDO::FETCH_ASSOC);
// Invalid argument supplied for foreach()
foreach( $result as $row ) {
    ...

а также

$stmt = $mysqli->prepare('SELECT ...');
// Call to a member function bind_param() on a non-object
$stmt->bind_param(...);

а также

$stmt = $pdo->prepare('SELECT ...');
// Call to a member function bindParam() on a non-object
$stmt->bindParam(...);
  • 15
    вы можете получить более полезные сообщения, используя :: QUERY или die (mysql_error ());
  • 120
    Также обязательное примечание: Ваш код подвержен SQL-инъекции . Вы должны проверить и / или избежать пользовательского ввода. Посмотрите на mysql_real_escape_string . Никогда не доверяйте пользовательским данным.
Показать ещё 5 комментариев
Теги:

33 ответа

665
Лучший ответ

Запрос может быть неудачным по различным причинам, и в этом случае оба mysql_ * и расширение mysqli вернут false из своих соответствующих функций/методов запроса. Вам необходимо проверить это условие ошибки и обработать его соответствующим образом.

mysql_ * расширение:

ПРИМЕЧАНИЕ Функции mysql_ устарели и были удалены в версии php версии 7.

Отметьте $result перед тем, как передать его в mysql_fetch_array. Вы обнаружите, что он false, потому что запрос завершился неудачно. См. Документацию mysql_query для возможных возвращаемых значений и предложений о том, как с ними бороться.

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

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

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

расширение mysqli
процедурный стиль:

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style:

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

с помощью подготовленного оператора:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Эти примеры только иллюстрируют, что должно быть сделано (обработка ошибок), а не как это сделать. При выводе HTML код производства не должен использовать or die, иначе он (по крайней мере) создаст неверный HTML. Кроме того, сообщения об ошибках базы данных не должны отображаться для пользователей, не являющихся администраторами, так как раскрывает слишком много информации.

  • 8
    Правильно, но использование die () в случае сбоя запроса - это слишком много.
  • 28
    Я собирался разработать весь механизм обработки ошибок для OP, но решил, что это может быть за рамками моего ответа.
Показать ещё 3 комментария
169

Это сообщение об ошибке отображается, если в вашем запросе возникла ошибка, из-за которой он был сбой. Он проявится при использовании:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

Примечание. Эта ошибка не появляется, если ваши запросы не влияют на строки. Только запрос с недопустимым синтаксисом генерирует эту ошибку.

Шаги устранения неполадок

  • Убедитесь, что ваш сервер разработки настроен для отображения всех ошибок. Вы можете сделать это, разместив это в верхней части своих файлов или в вашем файле конфигурации: error_reporting(-1);. Если у вас есть синтаксические ошибки, это укажет вам.

  • Используйте mysql_error(). mysql_error() сообщит о любых ошибках MySQL, возникающих при выполнении вашего запроса.

    Использование образца:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
    
  • Запустите запрос из командной строки MySQL или с помощью инструмента phpMyAdmin. Если у вас есть синтаксическая ошибка в вашем запросе, это скажет вам, что это такое.

  • Убедитесь, что ваши кавычки верны. Отсутствие цитаты вокруг запроса или значения может привести к сбою запроса.

  • Убедитесь, что вы избегаете своих значений. Цитаты в вашем запросе могут привести к сбою запроса (а также оставить вас открытым для SQL-инъекций). Используйте mysql_real_escape_string(), чтобы избежать ввода.

  • Убедитесь, что вы не смешиваете функции mysqli_* и mysql_*. Они не то же самое и не могут использоваться вместе. (Если вы собираетесь выбрать одну или другую палку с помощью mysqli_*. См. Ниже, почему.)

Другие советы

mysql_* функции не должны использоваться для нового кода. Они больше не поддерживаются, и сообщество начало процесс . Вместо этого вы должны узнать о подготовленных отчетах и использовать PDO или MySQLi. Если вы не можете решить, эта статья поможет выбрать. Если вы хотите узнать, вот хороший учебник PDO.

  • 1
    Учитывая этот вопрос сегодня stackoverflow.com/q/43804651/1415724 и другие подобные в последнее время; Я думаю, что может быть целесообразно обновить ваш ответ, чтобы он содержал что-то вроде: «Эта ошибка также может быть вызвана не выполнением запроса с помощью mysql_query() / mysqli_query($connection) и т. Д.» ; мысли? Поскольку ни один другой ответ в этом Q & A не упоминает об этом.
113

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

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

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

  • 5
    Зачем добавлять шум с конкатенацией строк, а не просто помещать переменную в строку запроса?
  • 1
    @Matteo Riva Да, но я подумал, что это немного более чистый способ отделения переменных от строки. :)
59

Как объяснил scompt.com, запрос может завершиться ошибкой. Используйте этот код, чтобы получить ошибку запроса или правильный результат:

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

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

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

Дополнительную информацию см. В документации для mysql_query().

Фактической ошибкой были одиночные кавычки, так что переменная $username не была проанализирована. Но вы должны действительно использовать mysql_real_escape_string($username) чтобы избежать инъекций SQL.

51

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

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

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

  • 1
    А что если $ username имеет вид: "'; DROP TABLES;" ? Это преимущество использования подготовленных утверждений и связанных значений, которые, я думаю, хотелось бы сохранить.
45

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

Проверьте

mysql_select_db('database name ')or DIE('Database name is not available!');

перед запросом MySQL а затем перейдите к следующему шагу

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

f($result === FALSE) {
    die(mysql_error());
40

Ваш код должен быть чем-то вроде этого

$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("error message for the user")); 
}

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

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

  • 1
    Не используйте этот код. Он широко открыт для атак с использованием SQL-инъекций.
36
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

Вы определяете строку, используя одинарные кавычки, и PHP не анализирует строки с разделителями одиночной кавычки. Чтобы получить переменную интерполяцию, вам нужно использовать двойные кавычки или конкатенацию строк (или их комбинацию). Подробнее см. http://php.net/manual/en/language.types.string.php.

Также вы должны проверить, что mysql_query вернул действительный ресурс результата, иначе fetch_ *, num_rows и т.д. не будут работать с результатом, поскольку это не результат! IE:

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

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php для получения дополнительной информации.

  • 0
    Не используйте этот код, даже если вы добавляете кавычки. Он широко открыт для атак с использованием SQL-инъекций.
33

Этот запрос должен работать:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Проблема заключается в одинарных кавычках, поэтому ваш запрос завершается с ошибкой и возвращает FALSE, и цикл WHILE не может выполняться. Использование% позволяет вам сопоставлять любые результаты, содержащие вашу строку (например, SomeText- $username-SomeText).

Это просто ответ на ваш вопрос, вы должны реализовать материал, упомянутый в других сообщениях: обработка ошибок, использование escape-строк (пользователи могут вводить что-либо в поле, и вы ДОЛЖНЫ убедиться, что это не произвольный код), используйте PDO вместо mysql_connect, который теперь лишен.

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

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

Иногда подавление запроса как @mysql_query(your query);

  • 0
    Не используйте этот код. Он широко открыт для атак с использованием SQL-инъекций.
26
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

Вместо использования запроса WHERE вы можете использовать этот запрос ORDER BY. Это намного лучше, чем это для использования запроса.

Я сделал этот запрос и не получаю никаких ошибок, таких как параметр или логический.

  • 0
    Не забывайте использовать htmlspecialchars() при использовании произвольных данных в контексте HTML. В противном случае вы рискуете создать действительный HTML, если в данных используются зарезервированные символы.
26

Если вы все пробовали здесь, и это не сработает, вы можете проверить сортировку базы данных MySQL. Мой был настроен на шведскую сортировку. Затем я изменил его на utf8_general_ci, и все просто нажало на передачу.

Я надеюсь, что это поможет кому-то.

25

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

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

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
  • 5
    1) Широко открыты для внедрения SQL, 2) не включает обработку ошибок, которая является причиной ошибки в случае OP.
  • 0
    +1. @deceze Да, это широко открыто. Но не более того, что код OP или принятый ответчик ;-) И это не отсутствие обработки ошибок в коде OP, вызывающее ошибку ... это ошибка , и этот ответ, по крайней мере, пытается ее устранить (поставив одиночный кавычки вокруг строкового литерала в выражении LIKE ).
Показать ещё 1 комментарий
21

Могут быть две причины:

  • Открыли ли вы подключение к базе данных до вызова функции mysql_query? Я не вижу этого в вашем коде. Перед выполнением запроса используйте mysql_connect. См. php.net/manual/en/function.mysql-connect.php

  • Переменная $username используется внутри одной строки кавычек, поэтому ее значение не будет оцениваться внутри запроса. Запрос, безусловно, потерпит неудачу.

В-третьих, структура запроса подвержена SQL-инъекции. Вы можете использовать подготовленные инструкции, чтобы избежать этой угрозы безопасности.

20

Попробуйте использовать следующий код. Он может работать нормально.

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

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
  • 2
    Этот код подвержен внедрению SQL и не должен использоваться.
15

Перейдите к config.php. У меня такая же проблема. Проверьте имя пользователя и пароль, а также sql select - это то же имя, что и config.

15
<?php
    $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'];
    }
?>

И если есть пользователь с уникальным именем пользователя, вы можете использовать для этого "=". Не нужно любить.

Ваш запрос будет выглядеть следующим образом:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");
  • 1
    Этот код широко открыт для внедрения SQL и не должен использоваться.
  • 0
    @Brad Почему этот код широко открыт для внедрения SQL?
Показать ещё 2 комментария
14

Не используйте лишенную функцию mysql_ * (лишенная php 5.5 будет удалена в php 7). и вы можете сделать это с помощью mysqli или pdo

вот полный запрос выбора

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>
14

Включите переменную строки подключения перед запросом MySQL. Например, $connt в этом коде:

$results = mysql_query($connt, "SELECT * FROM users");
12

Попробуйте это

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

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}
  • 4
    @panjehra mysql_ * теперь удален и будет удален из php 7. Используйте вместо этого mysqli_ *
10

Каждый раз, когда вы получаете...

"Предупреждение: mysqli_fetch_object() ожидает, что параметр 1 будет mysqli_result, boolean задан"

... Вероятно, из-за проблемы возникает вопрос. prepare() или query() могут возвращать FALSE (логическое), но это общее сообщение об отказе не оставляет вас в стороне от подсказок. Как вы узнаете, что не так с вашим запросом? Вы спрашиваете!

Прежде всего, убедитесь, что отчет об ошибках включен и отображается: добавьте эти две строки в начало файла (ов) сразу после вашего тэга <?php:

error_reporting(E_ALL);
ini_set('display_errors', 1);

Если ваш отчет об ошибках установлен в php.ini, вам не придется беспокоиться об этом. Просто убедитесь, что вы обрабатываете ошибки изящно и никогда не раскрываете истинные причины каких-либо проблем для ваших пользователей. Выявление истинной причины для общественности может быть приглашением на золото с гравировкой для тех, кто хочет нанести вред вашим сайтам и серверам. Если вы не хотите отправлять ошибки в браузер, вы всегда можете следить за журналами ошибок веб-сервера. Расположение журналов будет варьироваться от сервера к серверу, например, на Ubuntu журнал ошибок обычно находится в /var/log/apache2/error.log. Если вы изучаете журналы ошибок в среде Linux, вы можете использовать tail -f /path/to/log в окне консоли, чтобы видеть ошибки, которые происходят в режиме реального времени.... или как вы их делаете.

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

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

Ошибка является общей и не очень помогает вам в решении того, что происходит.

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

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error;
    echo $error; // 1054 Unknown column 'foo' in 'field list'
}

Если что-то не так, вы можете выплюнуть сообщение об ошибке, которое приведет вас к проблеме. В этом случае в таблице нет столбца foo, решение проблемы тривиально.

Если вы выберете, вы можете включить эту проверку в функцию или класс и расширить ее, обработав ошибки изящно, как упоминалось ранее.

10
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>
10

Сначала проверьте соединение с базой данных. Это связано успешно или нет?

Если это так, то после этого я написал этот код, и он работает хорошо:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}
  • 0
    Не используйте этот код. Он широко открыт для атак с использованием SQL-инъекций.
9

Убедитесь, что вы не закрываете базу данных. Используя db_close() Before To Выполнение запроса:

Если вы используете несколько запросов в script, даже если вы включаете другие страницы, содержащие запросы или подключение к базе данных, возможно, что в любом месте вы будете использовать db_close(), который закроет соединение с базой данных, убедитесь, что вы не делаете эту ошибку в своих сценариях.

8

Если во время проверки не появляется ошибка MySQL, убедитесь, что вы правильно создали таблицу базы данных. Это случилось со мной. Ищите любые нежелательные запятые или цитаты.

8

Сначала проверьте свое соединение.

Затем, если вы хотите получить точное значение из базы данных, тогда вы должны написать:

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

Или вы хотите получить тип значения LIKE, тогда вы должны написать:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
  • 1
    Этот код широко открыт для внедрения SQL и не должен использоваться.
7

Вы также можете проверить, что $result не работает так, перед выполнением массива выборки

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}
  • 1
    Не используйте этот код. Он широко открыт для атак с использованием SQL-инъекций.
  • 0
    Но если код работает, я чувствую, что вы должны отредактировать код и ввести необходимые фильтры, а не подвергать критике код.
Показать ещё 3 комментария
6

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

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
$Q1mrks = $_GET['q1mrks'];
$marks = $_GET['marks'];
$qt1 = $_GET['qt1'];

$qtype_qry = mysql_query("
    SELECT *
    FROM s_questiontypes
    WHERE quetype_id = '$qt1'
");
$row = mysql_fetch_assoc($qtype_qry);
$qcode = $row['quetype_code'];

$sq_qry = "
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    ORDER BY RAND() LIMIT $Q1mrks
";
$sq_qry = mysql_query("
    SELECT *
    FROM s_question
    WHERE quetype_code = '$qcode'
    LIMIT $Q1mrks
");
while ($qrow = mysql_fetch_array($sq_qry)) {
    $qm = $qrow['marks'] . "<br />";
    $total += $qm . "<br />";
}
echo $total . "/" . $marks;
}
  • 0
    Этот код широко открыт для атак с использованием SQL-инъекций и фактически не решает проблему, поставленную в вопросе.
5

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

include_once(db_connetc.php');

ИЛИ ЖЕ

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE 'id' ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • Рекомендуется выполнить запрос в sqlyog, а затем скопировать его в код своей страницы.
  • Всегда сохраняйте ваш запрос в переменной, а затем отображайте ее. Затем перейдите к mysql_query($query_variable); ,
  • 2
    1) Вы не знаете, голосовал ли я или нет на каком-либо ответе здесь, вверх или вниз. 2) Как я объяснил в моем первом комментарии; ваш ответ не ссылается на проблему ( логическое значение передано mysql_fetch_array ), и у вас есть синтаксические ошибки
  • 2
    В обоих примерах кода у вас неверные кавычки. Подсветка синтаксиса, примененная к вашему второму блоку кода, - это полный упадок, что что-то не так
Показать ещё 2 комментария
4

Попробуйте этот код, он отлично работает

присвойте переменной post переменной

   $username = $_POST['uname'];

   $password = $_POST['pass'];

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

if(!empty($result)){

    while($row = mysql_fetch_array($result)){
        echo $row['FirstName'];
     }
}
  • 1
    Этот код подвергается атакам SQL-инъекций и не должен использоваться.
3

поскольку $username - это php-переменная, нам нужно передать его как строку в mysqli, так как в запросе u, начинающемся с одной цитаты, мы будем использовать двойную кавычку, одинарную кавычку и полный стоп для целей конкатенации ( ". $username. '" ), если вы начали с двойной кавычки, вы бы отменили кавычки ( ".. $username." ).

$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'];
     }

$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'];
     }

но использование Mysql значительно обесценилось, вместо этого использует PDO. Он прост, но очень безопасен

  • 0
    Но использование Mysql обесценилось. вместо этого вы можете использовать PDO. Позвольте мне дать вам образец логина.
  • 2
    Пароли НИКОГДА не должны храниться в виде простого текста, использовать встроенные функции, которые есть в PHP для работы с хэшированием паролей и проверки хешированных паролей!
0

Используйте фигурные скобки вокруг имени пользователя $.

$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'];
}

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

-1

вы неправильно использовали функцию Like Like. из-за чего ваш вывод ничего.

SELECT * FROM Users WHERE UserName LIKE '%$username%'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню