web-dev-qa-db-fra.com

mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc ... attend que le paramètre 1 soit ressource ou résultat

J'essaie de sélectionner des données à partir d'une table MySQL, mais l'un des messages d'erreur suivants s'affiche:

mysql_fetch_array () s'attend à ce que le paramètre 1 soit une ressource, booléen

ou

mysqli_fetch_array () s'attend à ce que le paramètre 1 soit mysqli_result, boolean étant donné

ou

Appel à une fonction membre fetch_array () sur un booléen/non-objet

Ceci est mon code:

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

La même chose s'applique au code comme

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

et

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

et

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

et

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

et

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

Une requête peut échouer pour diverses raisons. Dans ce cas, mysql_ * et l'extension mysqli renverront false à partir de leurs fonctions/méthodes de requête respectives. Vous devez tester cette condition d'erreur et la gérer en conséquence.

extension mysql_ *:

NOTE Les les fonctions mysql_ sont obsolètes et ont été supprimées dans la version 7 de PHP.

Vérifiez _$result_ avant de le transmettre à _mysql_fetch_array_. Vous constaterez que c'est false parce que la requête a échoué. Consultez la documentation mysql_query pour connaître les valeurs de retour possibles et des suggestions sur la façon de les gérer.

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

extension mysqli
style procédural :

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

en utilisant une instruction préparée:

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

Ces exemples illustrent uniquement ce que doit être fait (traitement des erreurs) et non comment le faire. Le code de production ne doit pas utiliser or die lors de la sortie HTML, sinon il générera (à tout le moins) un code HTML invalide. De plus, les messages d'erreur de base de données ne devraient pas être affichés aux utilisateurs non-administrateurs, car révèle trop d'informations .

654
Edward Dale

Ce message d'erreur s'affiche lorsque vous avez une erreur dans votre requête qui a provoqué son échec. Cela se manifestera lors de l'utilisation:

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

Remarque : cette erreur ne n'apparaît pas si aucune ligne n'est affectée par votre requête. Seule une requête avec une syntaxe non valide générera cette erreur.

Étapes de dépannage

  • Assurez-vous que votre serveur de développement est configuré pour afficher toutes les erreurs. Vous pouvez le faire en plaçant ceci en haut de vos fichiers ou dans votre fichier de configuration: error_reporting(-1); . Si vous avez des erreurs de syntaxe, elles vous seront signalées.

  • Utilisez mysql_error() . mysql_error() signalera toutes les erreurs rencontrées par MySQL lors de l'exécution de votre requête.

    Exemple d'utilisation:

    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();
    }
    
  • Exécutez votre requête à partir de la ligne de commande MySQL ou d'un outil tel que phpMyAdmin . Si vous avez une erreur de syntaxe dans votre requête, cela vous dira ce que c'est.

  • Assurez-vous que vos citations sont correctes. Une citation manquante autour de la requête ou une valeur peut entraîner l'échec d'une requête.

  • Assurez-vous d'échapper à vos valeurs. Les citations de votre requête peuvent provoquer l'échec d'une requête (et vous laisser également ouvert aux injections SQL). Utilisez mysql_real_escape_string() pour échapper à votre saisie.

  • Assurez-vous de ne pas mélanger les fonctions mysqli_* et mysql_*. Ils ne sont pas la même chose et ne peuvent pas être utilisés ensemble. (Si vous allez choisir l'un ou l'autre, utilisez mysqli_*. Voir ci-dessous pour savoir pourquoi.)

Autres conseils

Les fonctions mysql_* ne doivent pas être utilisées pour le nouveau code. Ils ne sont plus maintenus et la communauté a commencé le processus de dépréciation . Au lieu de cela, vous devriez vous renseigner sur instructions préparées et utiliser soit PDO ou MySQLi . Si vous ne pouvez pas décider, cet article vous aidera à choisir. Si vous vous souciez d'apprendre, voici bon tutoriel PDO .

163
John Conde

Une erreur survenue ici était due à l'utilisation de guillemets simples ('). Vous pouvez poser votre requête comme ceci:

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

Il utilise mysql_real_escape_string pour prévenir l'injection SQL. Bien que nous devions utiliser l'extension MySQLi ou PDO_MYSQL pour la version mise à niveau de PHP (PHP 5.5.0 et versions ultérieures), mais pour les versions plus anciennes, mysql_real_escape_string fera l'affaire.

110
nik

Comme scompt.com a expliqué , la requête peut échouer. Utilisez ce code pour obtenir l'erreur de la requête ou le résultat correct:

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

Voir le documentation pour mysql_query() pour plus d'informations.

L'erreur réelle était constituée de guillemets simples, de sorte que la variable $username n'était pas analysée. Mais vous devriez vraiment utiliser mysql_real_escape_string($username) pour éviter les injections SQL.

61
2ndkauboy

Mettez des guillemets autour de $username. Les valeurs de chaîne, par opposition aux valeurs numériques, doivent être placées entre guillemets.

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

De plus, il est inutile d'utiliser la condition LIKE si vous n'utilisez pas de caractères génériques: si vous avez besoin d'une correspondance exacte, utilisez = au lieu de LIKE.

54
Matteo Riva

Veuillez cocher une fois que la base de données sélectionnée ne le sont pas car certaines fois la base de données n'est pas sélectionnée

Vérifier

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

avant la requête MySQL, puis passez à l'étape suivante

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

f($result === FALSE) {
    die(mysql_error());
44
yasin

Votre code devrait être quelque chose comme ça

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

Une fois cela fait, la requête serait imprimée à l'écran. Essayez cette requête sur votre serveur et voyez si elle produit les résultats souhaités. La plupart du temps, l'erreur est dans la requête. Le reste du code est correct.

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

Vous définissez la chaîne à l'aide de guillemets simples et PHP n'analyse pas les chaînes délimitées par des guillemets simples. Pour obtenir une interpolation variable, vous devez utiliser la concaténation de chaînes entre guillemets OR (ou une combinaison de celles-ci). Voir http://php.net/manual/en/language.types.string.php pour plus d'informations.

Aussi, vous devriez vérifier que mysql_query a retourné une ressource de résultat valide, sinon fetch_ *, num_rows, etc. ne fonctionneront pas sur le résultat car ce n'est pas un résultat! C'EST À DIRE:

$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 pour plus d'informations.

36
derokorian

Cette requête devrait fonctionner:

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

Le problème vient de guillemets simples, votre requête échoue et renvoie FALSE et votre boucle WHILE ne peut pas s'exécuter. L'utilisation de% vous permet de faire correspondre les résultats contenant votre chaîne (tels que SomeText- $ username-SomeText).

Ceci est simplement une réponse à votre question, vous devez implémenter les éléments mentionnés dans les autres messages: traitement des erreurs, utilisation de chaînes d'échappement (les utilisateurs peuvent taper n'importe quoi dans le champ, et vous DEVEZ vous assurer que ce n'est pas du code arbitraire), utilisez PDO à la place de mysql_connect qui est maintenant dépossédé.

35
Enis P. Aginić
$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'];
}

Parfois, supprimer la requête en tant que @mysql_query(your query);

30
Dip Pokhrel

Si vous avez tout essayé ici et que cela ne fonctionne pas, vous pouvez vérifier le classement de votre base de données MySQL. Le mien était réglé sur un classement suédois. Ensuite, je l'ai changé en utf8_general_ci et tout est passé à la vitesse supérieure.

J'espère que ça aidera quelqu'un.

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

Au lieu d'utiliser une requête WHERE, vous pouvez utiliser cette requête ORDER BY. C'est beaucoup mieux que cela pour l'utilisation d'une requête.

J'ai fait cette requête et je ne reçois aucune erreur comme paramètre ou booléen.

26
Gears.of.Codes

Essayez ceci, cela doit être un travail, sinon vous devez imprimer l'erreur pour spécifier votre problème

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

Essayez le code suivant. Cela peut fonctionner correctement.

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

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

Il pourrait y avoir deux raisons:

  1. Avez-vous ouvert la connexion à la base de données avant d'appeler la fonction mysql_query? Je ne vois pas ça dans votre code. Utilisez mysql_connect avant de faire la requête. Voir php.net/manual/en/function.mysql-connect.php

  2. La variable $ username est utilisée dans une seule chaîne de guillemets. Par conséquent, sa valeur ne sera pas évaluée dans la requête. La requête va définitivement échouer.

Troisièmement, la structure de la requête est sujette à injection SQL . Vous pouvez utiliser des instructions préparées pour éviter cette menace de sécurité.

21
asim-ishaq

Allez dans votre config.php. J'ai eu le même problème. Vérifiez le nom d'utilisateur et le mot de passe. De plus, sql select a le même nom que config.

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

Et s'il y a un utilisateur avec un nom d'utilisateur unique, vous pouvez utiliser "=" pour cela. Il n'y a pas besoin d'aimer.

Votre requête sera:

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

N'utilisez pas la fonction obsolète mysql * (obsolète en php 5.5 sera supprimé en php 7). et vous pouvez le faire avec mysqli ou pdo

voici la requête de sélection complète

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

Incluez une variable de chaîne de connexion avant la requête MySQL. Par exemple, $connt dans ce code:

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

Essaye ça

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

Chaque fois que vous obtenez le ...

"Attention: mysqli_fetch_object () s'attend à ce que le paramètre 1 soit mysqli_result, boolean étant donné"

... c'est probablement parce qu'il y a un problème avec votre requête. La prepare() ou query() peut renvoyer FALSE (un booléen), mais ce message d'échec générique ne vous laisse pas beaucoup d'indices. Comment trouvez-vous ce qui ne va pas avec votre requête? Vous demander!

Tout d’abord, assurez-vous que le rapport d’erreur est activé et visible: ajoutez ces deux lignes en haut de vos fichiers juste après votre balise d’ouverture <?php:

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

Si votre rapport d'erreur a été défini dans le fichier php.ini, vous n'aurez pas à vous en préoccuper. Assurez-vous simplement de gérer les erreurs avec élégance et de ne jamais révéler à vos utilisateurs la véritable cause de tout problème. Révéler la véritable cause au public peut être une invitation gravée dans l’or pour ceux qui veulent nuire à vos sites et à vos serveurs. Si vous ne souhaitez pas envoyer d'erreurs au navigateur, vous pouvez toujours surveiller les journaux d'erreurs de votre serveur Web. L'emplacement des journaux varie d'un serveur à l'autre. Par exemple, sous Ubuntu, le journal des erreurs se trouve généralement à l'adresse /var/log/Apache2/error.log. Si vous examinez les journaux d'erreurs dans un environnement Linux, vous pouvez utiliser tail -f /path/to/log dans une fenêtre de console pour voir les erreurs lorsqu'elles se produisent en temps réel .... ou au fur et à mesure que vous les créez.

Une fois que vous êtes prêt à signaler les erreurs standard, ajouter une vérification des erreurs sur votre connexion à la base de données et des requêtes vous donnera beaucoup plus de détails sur les problèmes rencontrés. Jetez un oeil à cet exemple où le nom de colonne est incorrect. Tout d’abord, le code qui renvoie le message d’erreur fatale générique:

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

L'erreur est générique et ne vous aide pas beaucoup à résoudre ce qui se passe.

Avec quelques lignes de code supplémentaires, vous pouvez obtenir des informations très détaillées que vous pouvez utiliser pour résoudre le problème immédiatement. Vérifiez la vérité de la déclaration prepare() et si elle est bonne, vous pouvez procéder à la liaison et à l’exécution.

$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 quelque chose ne va pas, vous pouvez cracher un message d'erreur qui vous amène directement au problème. Dans ce cas, il n'y a pas de colonne foo dans la table, la résolution du problème est triviale.

Si vous le souhaitez, vous pouvez inclure cette vérification dans une fonction ou une classe et l'étendre en corrigeant les erreurs comme indiqué précédemment.

12
Jay Blanchard

Tout d'abord, vérifiez votre connexion à la base de données. Est-ce connecté avec succès ou pas?

Si c'est fait, après cela, j'ai écrit ce code et cela fonctionne 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;
}
11
user2155518
<?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'];
 }
 ?>
11
Dennis Kiptugen

Assurez-vous de ne pas fermer la base de données en utilisant db_close () avant d'exécuter votre requête:

Si vous utilisez plusieurs requêtes dans un script, même si vous incluez d'autres pages contenant des requêtes ou une connexion à une base de données, il est possible que vous utilisiez n'importe quel emplacement db_close () pour fermer votre connexion à la base de données. ne pas faire cette erreur dans vos scripts.

10
A.Aleem11

Vérifiez votre connexion en premier.

Ensuite, si vous souhaitez récupérer la valeur exacte de la base de données, vous devez écrire:

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

Ou vous voulez récupérer le type de valeur LIKE, alors vous devriez écrire:

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

Si aucune erreur MySQL n'apparaît lors de la vérification, assurez-vous d'avoir correctement créé votre table de base de données. Cela m'est arrivé Recherchez les virgules ou les guillemets indésirables.

9
user1012181

Vous pouvez également vérifier si $result échoue de la sorte avant d'exécuter le tableau d'extraction.

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

Vous pouvez essayer ce code. Je l'ai trouvé plus tôt lorsque j'ai été confronté à un problème similaire au vôtre.

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

Généralement, une erreur se produit lorsque la connectivité de votre base de données échoue. Veillez donc à connecter votre base de données ou à inclure le fichier de base de données.

include_once(db_connetc.php');

OR

// 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 meilleure pratique consiste à exécuter la requête dans sqlyog, puis à la copier dans le code de votre page.
  • Stockez toujours votre requête dans une variable, puis indiquez cette variable en écho. Puis passez à mysql_query($query_variable);.
6
Engr Zardari

Essayez ce code ça marche bien

assigne la variable de poste à 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'];
     }
}
4
Ritesh d joshi

puisque $ username est une variable php, nous devons la transmettre sous forme de chaîne à mysqli. Ainsi, dans la requête, nous commencerons par un seul devis. '") si vous avez commencé avec une citation double, vous inverseriez alors les guillemets ('". $ 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'];
     }

mais l'utilisation de Mysql s'est beaucoup dépréciée, utilisez plutôt PDO.it est simple mais très sécurisé

3
Dennis Kiptugen

Traditionnellement, PHP a été tolérant aux mauvaises pratiques et aux échecs de code, ce qui rend le débogage très difficile. Le problème dans ce cas particulier est que mysqli et PDO par défaut ne vous le disent pas, lorsqu'une requête échoue et vous renvoient simplement FALSE. (Je ne parlerai pas de l'extension mysql défavorisée. Le support de instructions préparées est une raison suffisante pour passer à PDO ou - mysqli.) Mais vous pouvez changer le comportement par défaut de PHP pour qu'il jette toujours exceptions quand une requête échoue.

Pour PDO: Utilisez $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:Host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query('select emal from users');
$data = $result->fetchAll();

Cela vous montrera ce qui suit:

Erreur fatale: exception non capturée 'PDOException' avec le message 'SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue' emal 'dans la' liste des champs '' dans E:\htdocs\test\mysql_errors\pdo.php à la ligne 8

PDOException: SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'emal' dans 'liste de champs' dans E:\htdocs\test\mysql_errors\pdo.php à la ligne 8

Comme vous le voyez, il vous dit exactement ce qui ne va pas avec la requête et où le corriger dans votre code.

Sans $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); vous obtiendrez

Erreur fatale: appel de la fonction membre fetchAll () sur un booléen dans E:\htdocs\test\mysql_errors\pdo.php à la ligne 9

Pour mysqli: Utilisez mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test');

$result = $mysqli->query('select emal from users');
$data = $result->fetch_all();

Tu auras

Erreur fatale: exception non capturée 'mysqli_sql_exception' avec le message 'Colonne inconnue' emal 'dans la' liste des champs '' dans E:\htdocs\test\mysql_errors\mysqli.php à la ligne 8

mysqli_sql_exception: colonne inconnue 'emal' dans la 'liste des champs' dans E:\htdocs\test\mysql_errors\mysqli.php à la ligne 8

Sans mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); vous obtenez seulement

Erreur fatale: appel à une fonction membre fetch_all () sur un booléen dans E:\htdocs\test\mysql_errors\mysqli.php à la ligne 10

Bien sûr, vous pouvez vérifier manuellement les erreurs MySQL. Mais je deviendrais fou si je devais le faire chaque fois que je faisais une faute de frappe - ou pire - chaque fois que je voulais interroger la base de données.

0
Paul Spiegel