warning parameter mysqli_result mysqli_query mysqli_fetch_row mysqli_fetch_assoc mysqli_fetch_array given expects ejemplo all php mysql mysqli

php - mysqli_query - warning mysqli_fetch_row() expects parameter 1 to be mysqli_result boolean given in



mysqli_fetch_array()/mysqli_fetch_assoc()/mysqli_fetch_row() espera que el parĂ¡metro 1 sea resource o mysqli_result, boolean given (30)

Ponga las 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 utilizar la condición LIKE si no utiliza caracteres comodín: si necesita una coincidencia exacta, use = lugar de LIKE .

Estoy intentando seleccionar datos de una tabla de MySQL, pero consigo uno de los mensajes de error siguientes:

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

o

mysqli_fetch_array () espera que el parámetro 1 sea mysqli_result, boolean given

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 al código como

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

y

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

y

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

y

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

y

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


Su código debe 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ía la consulta impresa en la pantalla. Pruebe esta consulta en su servidor y ver si produce los resultados deseados. La mayoría de las veces el error está en la consulta. El resto del código es correcto.


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

Usted define la cadena usando comillas simples y PHP no analiza cadenas delimitadas de una sola cotización. Para obtener una interpolación variable, necesitará usar comillas dobles O concatenación de cadenas (o una combinación de ellas). Consulte http://php.net/manual/es/language.types.string.php para obtener más información.

También debe comprobar que mysql_query devolvió un recurso de resultado válido, de lo contrario fetch_ *, num_rows, etc no funcionará en el resultado como no es un resultado! ES DECIR:

$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://es.php.net/manual/en/function.mysql-query.php para más información.


Compruebe una vez que la base de datos seleccionada no sea porque algunas veces la base de datos no está seleccionada

Comprobar

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

antes de la consulta MySQL y luego pasar al siguiente paso

$result = mysql_query(''SELECT * FROM Users WHERE UserName LIKE $username''); f($result === FALSE) { die(mysql_error());


Esta consulta debería funcionar:

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

El problema es comillas simples, por lo tanto, su consulta falla y devuelve FALSE y su bucle WHILE no se puede ejecutar. Usar% le permite hacer coincidir cualquier resultado que contenga su cadena (tal como SomeText- $ username-SomeText).

Esto es simplemente una respuesta a su pregunta, debe implementar cosas mencionadas en las otras publicaciones: manejo de errores, use cadenas de escape (los usuarios pueden escribir algo en el campo, y DEBE asegurarse de que no es código arbitrario), use PDO mysql_connect que ahora es depricated.


También puede comprobar si su $result está fallando así, antes de ejecutar el array de búsqueda

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


Vaya a su 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 config.


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

A veces suprimiendo la consulta como @mysql_query(your query);


Compruebe primero su conexión.

A continuación, 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%''");


En primer lugar, compruebe su conexión a la base de datos. ¿Está conectado correctamente o no?

Si se hace, 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; }


Por lo general, se produce un error cuando falla la conectividad de la base de datos, así que asegúrese de conectar su base de datos o incluir el archivo de 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 la página.
  • Siempre almacene su consulta en una variable y luego echo esa variable. Luego pasa a mysql_query($query_variable); .

Pruebe el siguiente código. Puede funcionar bien.

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


Puede haber dos razones:

  1. ¿Ha abierto la conexión a la base de datos antes de llamar a la función mysql_query? No lo veo en tu código. Utilice mysql_connect antes de realizar la consulta. Ver php.net/manual/en/function.mysql-connect.php

  2. La variable $ username se utiliza dentro de una cadena de comillas simples, por lo que su valor no se evaluará dentro de la consulta. La consulta definitivamente fallará.

En tercer lugar, la estructura de la consulta es propensa a la inyección de SQL . Puede utilizar declaraciones preparadas para evitar esta amenaza de seguridad.


Si ha intentado todo aquí y no funciona, quizás desee comprobar su colación de bases de datos MySQL. La mía estaba destinada a una colación sueca. Entonces lo cambié a utf8_general_ci y todo apenas utf8_general_ci en engranaje.

Espero que esto ayude a alguien.


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

Y si hay un usuario con un nombre de usuario único, puede usar "=" para eso. No hay necesidad de gustar.

Su consulta será:

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


Pruebe este código funciona bien

asignar la variable post 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'']; } }


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 un script, incluso incluirá otras páginas que contengan consultas o conexión a la base de datos, es posible que en cualquier lugar que utilice db_close () cierre su conexión a la base de datos, no haciendo este error en sus secuencias de comandos.


$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 errores como parámetro o boolean.


Si no tiene ningún error de MySQL apareciendo durante la comprobación, asegúrese de que ha creado correctamente la tabla de la base de datos. Esto me sucedió. Busque cualquier comillas o comillas no deseadas.


Este mensaje de error se muestra cuando se produce un error en la consulta que provocó un error. Se manifestará al usar:

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

Nota : este error no aparece si no hay filas afectadas por la consulta. Sólo una consulta con una sintaxis no válida generará este error.

Pasos para la solución de problemas

  • Asegúrese de que su servidor de desarrollo está configurado para mostrar todos los errores. Puede hacerlo 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, esto los indicará.

  • Utilizar mysql_error() . mysql_error() reportará cualquier error que MySQL haya encontrado durante la realización de la consulta.

    Ejemplo de uso:

    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 la 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 dirá qué es.

  • Asegúrese de que sus cotizaciones son correctas. Una cita que falte alrededor de la consulta o un valor puede provocar que una consulta falle.

  • Asegúrese de que está escapando de sus valores. Las citas de la consulta pueden provocar que una consulta falle (y también dejar abierta las inyecciones de SQL). Utilice mysql_real_escape_string() para escapar de su entrada.

  • Asegúrese de no mezclar mysqli_* y mysql_* . No son lo mismo y no se pueden usar juntos. (Si va a elegir uno o el otro palo con mysqli_* . Vea abajo por qué.)

Otros consejos

mysql_* funciones mysql_* no se deben usar para el nuevo código. Ya no se mantienen y la comunidad ha comenzado el proceso de depreciación . En su lugar debe aprender acerca de declaraciones preparadas y utilizar ya sea PDO o MySQLi . Si no puede decidir, este artículo le ayudará a elegir. Si te interesa aprender, aquí está un buen tutorial de PDO .


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

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


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


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


No utilice la función mysql_ * depricated (depricated en php 5.5 será eliminado en php 7). y usted puede 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(); ?>


Pruebe esto, debe ser trabajo, de lo contrario necesita imprimir el error para especificar su problema

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


Cada vez que ...

"Advertencia: mysqli_fetch_object () espera que el parámetro 1 sea mysqli_result, boolean given"

... es probable porque hay un problema con su consulta. El prepare() o query() puede devolver FALSE (un booleano), pero este mensaje de error genérico no le deja mucho en la forma de pistas. ¿Cómo averiguar qué está mal con su consulta? Usted pregunta !

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

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

Si el informe de errores se ha establecido en php.ini, no tendrá que preocuparse por esto. Sólo asegúrese de manejar los errores con gracia y nunca revelar la verdadera causa de los problemas a sus usuarios. Revelando la verdadera causa para el público puede ser una invitación grabada de oro para aquellos que quieren dañar sus sitios y servidores. Si no desea enviar errores al navegador, siempre puede supervisar los registros de errores del servidor web. Las ubicaciones de registro varían de servidor a servidor, 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 utilizar tail -f /path/to/log en una ventana de consola para ver los errores como ocurren en tiempo real ... o cuando los hace.

Una vez que se cuadran en informes de error estándar de añadir la comprobación de errores en su conexión a la base de datos y las consultas le dará mucho más detalle sobre los problemas que están pasando. Eche un vistazo a este ejemplo donde el nombre de columna es incorrecto. En primer lugar, 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 muy útil para usted en la solución de lo que está pasando.

Con un par de más líneas de código puede obtener información muy detallada que puede utilizar para resolver el problema de inmediato . Compruebe la instrucción prepare() para veracidad y si es bueno puede proceder a la vinculación y la 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 le lleva directamente al problema. En este caso no hay ninguna columna foo en la tabla, resolver el problema es trivial.

Si elige, puede incluir esta comprobación en una función o clase y ampliarla manipulando los errores con gracia como se mencionó anteriormente.


El error ocurrido aquí se debió al uso de comillas simples ( '' ). Puedes poner tu consulta como esta:

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

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


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


Como explica scompt.com , la consulta puede fallar. Utilice este código para obtener el error de la consulta o el resultado correcto:

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

Consulte la documentación de mysql_query() para obtener más información.

El error real fue las comillas simples para que la variable $username no se analizara. Pero realmente debería usar mysql_real_escape_string($username) para evitar inyecciones de SQL.


Una consulta puede fallar por varias razones en cuyo caso tanto el mysql_ * como la extensión mysqli devolverán false de sus respectivas funciones / métodos de consulta. Es necesario probar esa condición de error y manejarla en consecuencia.

mysql_ * extensión :

NOTA Las funciones mysql_ están obsoletas y se han eliminado en php versión 7.

Compruebe el $result antes de pasarlo a mysql_fetch_array . Verá que es false porque la consulta falló. Consulte la documentación de mysql_query para obtener posibles valores de retorno y sugerencias sobre cómo tratarlos.

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

extensión mysqli
estilo de procedimiento :

$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-estilo :

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

utilizando una declaración preparada:

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

Estos ejemplos sólo ilustran lo que debe hacerse (manejo de errores), no cómo hacerlo. El código de producción no debe utilizar or die al imprimir HTML, de lo contrario generará HTML no válido (por lo menos). Además, los mensajes de error de la base de datos no deben mostrarse a usuarios que no sean administradores, ya que revelan demasiada información .