MySQL для выборки массива()/MySQL для выборки ДОЦ()/MySQL в строку()/MySQL на кол-во строк и т. д... ожидает параметр 1, чтобы быть ресурсом

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

mysql_fetch_array() ожидает параметр 1 будет ресурсом, булевым дается

или

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

или

вызов функции-члена fetch_array () на boolean / non-object

это мой код:

$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(...);

30 ответов


запрос может завершиться неудачей по различным причинам, в этом случае 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 ) {
        ...

ОО-стиле:

$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 ) {
      ...

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


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

  • 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 учебник.


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

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 будет делать трюк.


As 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-инъекции.


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

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

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


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

Регистрация

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());

ваш код должен быть примерно таким

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

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


$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 и т. д. не будут работать с результатом как есть не результат! Т. е.:

$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 для получения дополнительной информации.


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

$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 вместо соединение, которое теперь depricated.


$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);


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

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


$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 вы можете использовать этот порядок по запросу. Это намного лучше, чем это для использования запроса.

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


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

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

попробуйте следующий код. Это может сработать.

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

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

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

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

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

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


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


<?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."'");

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

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

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

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

<?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();
?>

Попробуй Такое

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

сначала проверьте подключение к базе данных. Он подключен успешно или нет?

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

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;
}

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

в любое время вы получите...

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

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

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

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

если ваш отчет об ошибках был установлен в PHP.Ини вам не придется беспокоиться об этом. Просто убедитесь, что вы обрабатываете ошибки изящно и никогда не раскрываете истинную причину каких-либо проблем своим пользователям. Выявление истинной причины для общественности может быть золотым гравированным приглашением для тех, желая навредить вашим сайтам и серверам. Если вы не хотите отправлять ошибки в браузер, вы всегда можете отслеживать журналы ошибок веб-сервера. Расположение журналов будет отличаться от сервера к серверу, например, на 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'
}

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


убедитесь, что вы не закрываете базу данных с помощью db_close() перед Выполнение Запроса:

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


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

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

$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%'");

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


вы также можете проверить погоду $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'];
       }
}

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

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;
}

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

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);.

попробуйте этот код, он работает нормально

назначьте переменную 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'];
     }
}