php - mysqli_result - warning mysql_fetch_row() expects parameter 1 to be resource object given in




mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc… espera que el parámetro 1 sea un recurso (20)

Asegúrese de que no está cerrando la base de datos utilizando db_close () antes de ejecutar su consulta:

Si está utilizando varias consultas en una secuencia de comandos, incluso si está incluyendo otras páginas que contienen consultas o conexión de base de datos, es posible que en cualquier lugar use db_close () que cierre su conexión de base de datos, así que asegúrese de No cometiendo este error en tus guiones.

Estoy tratando de seleccionar datos de una tabla MySQL, pero recibo uno de los siguientes mensajes de error:

mysql_fetch_array () espera que el parámetro 1 sea un recurso, dado booleano

o

mysqli_fetch_array () espera que el parámetro 1 sea mysqli_result, dado un valor booleano

o

Llame a una función miembro fetch_array () en boolean / non-object

Este es mi código:

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

Lo mismo se aplica a código como

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

y

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

y

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

y

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

y

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

Cada vez que obtenga el ...

"Advertencia: mysqli_fetch_object () espera que el parámetro 1 sea mysqli_result, dado un valor booleano"

... es probable porque hay un problema con su consulta. La prepare() o la query() pueden devolver FALSE (un valor booleano), pero este mensaje de error genérico no te deja mucho en el camino de las pistas. ¿Cómo descubres qué es lo que está mal con tu consulta? Usted pregunta

En primer lugar, asegúrese de que el informe de errores esté activado y sea visible: agregue estas dos líneas en la parte superior de su (s) archivo (s) justo después de abrir la etiqueta <?php :

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

Si su informe de errores se ha establecido en php.ini, no tendrá que preocuparse por esto. Solo asegúrese de manejar los errores con gracia y nunca revele la verdadera causa de los problemas a sus usuarios. Revelar la verdadera causa al público puede ser una invitación grabada con oro para aquellos que desean dañar sus sitios y servidores. Si no desea enviar errores al navegador, siempre puede supervisar los registros de errores de su servidor web. Las ubicaciones de los registros variarán de un servidor a otro, por ejemplo, en Ubuntu, el registro de errores normalmente se encuentra en /var/log/apache2/error.log . Si está examinando los registros de errores en un entorno Linux, puede usar tail -f /path/to/log en una ventana de consola para ver los errores que se producen en tiempo real ... o cuando los crea.

Una vez que esté al tanto de los informes de errores estándar, agregue la verificación de errores en su conexión de base de datos y las consultas le brindarán muchos más detalles sobre los problemas que están ocurriendo. Eche un vistazo a este ejemplo donde el nombre de la columna es incorrecto. Primero, el código que devuelve el mensaje de error fatal genérico:

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

El error es genérico y no es muy útil para resolver lo que está sucediendo.

Con un par de líneas de código más, puede obtener información muy detallada que puede utilizar para resolver el problema de inmediato . Verifique la declaración de prepare() para ver si es cierta y, si es buena, puede proceder a la vinculación y ejecución.

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

Si algo está mal, puede escupir un mensaje de error que lo lleve directamente al problema. En este caso, no hay ninguna columna foo en la tabla, resolver el problema es trivial.

Si lo desea, puede incluir esta comprobación en una función o clase y extenderla manejando los errores como se mencionó anteriormente.


Compruebe su conexión primero.

Luego, si desea obtener el valor exacto de la base de datos, debe escribir:

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

O si desea obtener el tipo de valor LIKE , debe escribir:

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

El error ocurrido aquí fue debido al uso de comillas simples ( ' ). Puedes poner tu consulta así:

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

Está utilizando mysql_real_escape_string para prevenir la inyección de SQL. Aunque deberíamos usar la extensión MySQLi o PDO_MYSQL para una versión actualizada de PHP (PHP 5.5.0 y posterior), pero para versiones anteriores mysql_real_escape_string hará el truco.


Este mensaje de error se muestra cuando tiene un error en su consulta que hizo que fallara. Se manifestará cuando se use:

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

Nota : este error no aparece si la consulta no afecta a ninguna fila. Solo una consulta con una sintaxis no válida generará este error.

Pasos para solucionar problemas

  • Asegúrese de tener su servidor de desarrollo configurado para mostrar todos los errores. Puede hacer esto colocando esto en la parte superior de sus archivos o en su archivo de configuración: error_reporting(-1); . Si tiene algún error de sintaxis, se lo señalaremos.

  • Utilice mysql_error() . mysql_error() informará cualquier error que haya encontrado MySQL al realizar su consulta.

    Uso de la muestra:

    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();
    }
    
  • Ejecute su consulta desde la línea de comandos de MySQL o una herramienta como phpMyAdmin . Si tiene un error de sintaxis en su consulta, esto le indicará qué es.

  • Asegúrese de que sus citas son correctas. Una cita que falta alrededor de la consulta o un valor puede hacer que una consulta falle.

  • Asegúrate de que estás escapando de tus valores. Las citas en su consulta pueden hacer que una consulta falle (y también lo deja abierto a inyecciones de SQL). Usa mysql_real_escape_string para escapar de tu entrada.

  • Asegúrese de que no está mezclando las mysqli_* y mysql_* . No son lo mismo y no pueden usarse juntos. (Si va a elegir uno u otro, mysqli_* con mysqli_* . Consulte a continuación el motivo).

Otros consejos

mysql_* funciones mysql_* no deben usarse para el nuevo código. Ya no se mantienen y la comunidad ha comenzado el proceso de desaprobación . En su lugar, debería aprender sobre declaraciones preparadas y usar PDO o MySQLi . Si no puedes decidir, este artículo te ayudará a elegir. Si te interesa aprender, aquí hay un buen tutorial de DOP .


Incluir una variable de cadena de conexión antes de la consulta de MySQL. Por ejemplo, $connt en este código:

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

No use la función mysql_ * aberrada (depricada en php 5.5 se eliminará en php 7). y puedes hacer esto con mysqli o pdo

Aquí está la consulta de selección completa

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

Pon comillas alrededor de $username . Los valores de cadena, a diferencia de los valores numéricos, deben estar entre comillas.

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

Además, no tiene sentido usar la condición LIKE si no usa comodines: si necesita una coincidencia exacta use = lugar de LIKE .


Por lo general, se produce un error cuando falla la conectividad de su base de datos, así que asegúrese de conectar su base de datos o de incluir el archivo de la base de datos.

include_once(db_connetc.php');

O

// 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
  • La mejor práctica es ejecutar la consulta en sqlyog y luego copiarla en el código de su página.
  • Siempre almacene su consulta en una variable y luego haga eco de esa variable. Luego pase a mysql_query($query_variable); .

Primero, verifique su conexión a la base de datos. ¿Está conectado con éxito o no?

Si está hecho, después de eso he escrito este código y funciona bien:

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

Prueba este código funciona bien

asignar la variable de publicación a la variable

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

Prueba esto

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

Puedes probar este código. Lo encontré antes cuando me encontré con un problema similar al tuyo.

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

Si no aparece ningún error de MySQL durante la comprobación, asegúrese de haber creado correctamente la tabla de la base de datos. Esto me paso a mi Busque cualquier comas o comillas no deseadas.


También puede comprobar si el $result está fallando así, antes de ejecutar la matriz de recuperación

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

Tu código debería ser algo como esto

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

Una vez hecho esto, obtendrías la consulta impresa en la pantalla. Pruebe esta consulta en su servidor y vea si produce los resultados deseados. La mayoría de las veces el error está en la consulta. El resto del código es correcto.


Ve a tu config.php . Yo tuve el mismo problema. Verifique el nombre de usuario y la contraseña, y también sql select es el mismo nombre que la configuración.


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

En lugar de utilizar una consulta WHERE, puede utilizar esta consulta ORDER BY. Es mucho mejor que esto para el uso de una consulta.

He hecho esta consulta y no estoy recibiendo ningún error como parámetro o booleano.


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

En ocasiones, se suprime la consulta como @mysql_query(your query);


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






mysql