it-swarm.com.de

mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc ... erwartet, dass Parameter 1 eine Ressource oder ein Ergebnis ist

Ich versuche, Daten aus einer MySQL-Tabelle auszuwählen, erhalte jedoch eine der folgenden Fehlermeldungen:

mysql_fetch_array () erwartet, dass Parameter 1 eine Ressource ist, die boolesch angegeben wird

oder

mysqli_fetch_array () erwartet, dass Parameter 1 mysqli_result ist, boolesch angegeben

oder

Aufruf einer Mitgliedsfunktion fetch_array () für boolean/non-object

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

Gleiches gilt für Code like

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

und

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

und

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

und

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

und

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

Eine Abfrage kann aus verschiedenen Gründen fehlschlagen. In diesem Fall geben sowohl mysql_ * als auch die mysqli-Erweiterung false von ihren jeweiligen Abfragefunktionen/-methoden zurück. Sie müssen diese Fehlerbedingung testen und entsprechend behandeln.

mysql_ * extension:

NOTE Die mysql_ Funktionen sind veraltet und wurden in PHP Version 7 entfernt.

Überprüfen Sie _$result_, bevor Sie es an _mysql_fetch_array_ übergeben. Sie werden feststellen, dass es false ist, weil die Abfrage fehlgeschlagen ist. In der Dokumentation mysql_query finden Sie mögliche Rückgabewerte und Vorschläge zum Umgang damit.

_$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 extension
prozeduraler Stil :

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

mit einer vorbereiteten Anweisung:

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

Diese Beispiele veranschaulichen nur , was zu tun ist (Fehlerbehandlung), nicht wie. Der Produktionscode sollte bei der Ausgabe von HTML nicht or die verwenden, da sonst (zumindest) ungültiges HTML generiert wird. Außerdem sollten Datenbankfehlermeldungen nicht für Benutzer ohne Administratorrechte angezeigt werden, da zu viele Informationen werden angezeigt .

654
Edward Dale

Diese Fehlermeldung wird angezeigt, wenn Ihre Abfrage einen Fehler enthält, der zum Fehlschlagen geführt hat. Es manifestiert sich bei Verwendung von:

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

Hinweis : Dieser Fehler wird nicht angezeigt , wenn Ihre Abfrage keine Zeilen betrifft. Nur eine Abfrage mit einer ungültigen Syntax generiert diesen Fehler.

Schritte zur Fehlerbehebung

  • Stellen Sie sicher, dass Ihr Entwicklungsserver so konfiguriert ist, dass alle Fehler angezeigt werden. Sie können dies tun, indem Sie dies oben in Ihre Dateien oder in Ihre Konfigurationsdatei einfügen: error_reporting(-1); . Wenn Sie Syntaxfehler haben, werden Sie darauf hingewiesen.

  • Verwenden Sie mysql_error() . mysql_error() meldet alle Fehler, auf die MySQL bei der Ausführung Ihrer Abfrage gestoßen ist.

    Beispielnutzung:

    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();
    }
    
  • Führen Sie Ihre Abfrage über die MySQL-Befehlszeile oder ein Tool wie phpMyAdmin aus. Wenn Ihre Abfrage einen Syntaxfehler enthält, erfahren Sie, um was es sich handelt.

  • Stellen Sie sicher, dass Ihre Anführungszeichen korrekt sind. Ein fehlendes Anführungszeichen um die Abfrage oder einen Wert kann dazu führen, dass eine Abfrage fehlschlägt.

  • Stellen Sie sicher, dass Sie Ihren Werten entkommen. Anführungszeichen in Ihrer Abfrage können dazu führen, dass eine Abfrage fehlschlägt (und Sie für SQL-Injektionen offen bleiben). Verwenden Sie mysql_real_escape_string() , um sich Ihrer Eingabe zu entziehen.

  • Stellen Sie sicher, dass Sie die Funktionen mysqli_* und mysql_* nicht mischen. Sie sind nicht dasselbe und können nicht zusammen verwendet werden. (Wenn Sie sich für den einen oder anderen Stick mit mysqli_* entscheiden möchten, lesen Sie weiter unten, warum.)

Andere Tipps

mysql_* -Funktionen sollten nicht für neuen Code verwendet werden. Sie werden nicht mehr gepflegt und die Community hat den Verfallsprozess begonnen. Stattdessen sollten Sie vorbereitete Anweisungen kennenlernen und entweder PDO oder MySQLi verwenden. Wenn Sie sich nicht entscheiden können, hilft dieser Artikel bei der Auswahl. Wenn Sie lernen möchten, finden Sie hier gutes PDO-Tutorial .

163
John Conde

Der hier aufgetretene Fehler beruht auf der Verwendung von einfachen Anführungszeichen ('). Sie können Ihre Anfrage folgendermaßen stellen:

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

Es verwendet mysql_real_escape_string, um die SQL-Injection zu verhindern. Wir sollten zwar die Erweiterung MySQLi oder PDO_MYSQL für die aktualisierte Version von PHP (PHP 5.5.0 und höher) verwenden, aber für ältere Versionen reicht mysql_real_escape_string aus.

110
nik

Wie unter scompt.com erklärt , kann die Abfrage fehlschlagen. Verwenden Sie diesen Code, um den Fehler der Abfrage oder das richtige Ergebnis zu erhalten:

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

Weitere Informationen finden Sie in der Dokumentation für mysql_query() .

Der eigentliche Fehler waren die einfachen Anführungszeichen, sodass die Variable $username nicht analysiert wurde. Aber Sie sollten wirklich mysql_real_escape_string($username) verwenden, um SQL-Injektionen zu vermeiden.

61
2ndkauboy

Setzen Sie Anführungszeichen um $username. Zeichenfolgenwerte müssen im Gegensatz zu numerischen Werten in Anführungszeichen gesetzt werden.

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

Es hat auch keinen Sinn, die Bedingung LIKE zu verwenden, wenn Sie keine Platzhalter verwenden: Wenn Sie eine genaue Übereinstimmung benötigen, verwenden Sie = anstelle von LIKE.

54
Matteo Riva

Bitte überprüfen Sie, ob die ausgewählte Datenbank nicht ausgewählt ist, da die Datenbank manchmal nicht ausgewählt ist

Prüfen

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

vor MySQL abfragen und dann mit dem nächsten Schritt fortfahren

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

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

Ihr Code sollte ungefähr so ​​aussehen

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

Sobald dies erledigt ist, wird die Abfrage auf dem Bildschirm gedruckt. Probieren Sie diese Abfrage auf Ihrem Server aus und prüfen Sie, ob die gewünschten Ergebnisse erzielt werden. Meistens liegt der Fehler in der Abfrage. Der Rest des Codes ist korrekt.

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

Sie definieren die Zeichenfolge in einfachen Anführungszeichen, und PHP parst keine durch einfache Anführungszeichen getrennten Zeichenfolgen. Um eine variable Interpolation zu erhalten, müssen Sie doppelte Anführungszeichen OR (oder eine Kombination daraus) verwenden. Weitere Informationen finden Sie unter http://php.net/manual/en/language.types.string.php .

Außerdem sollten Sie überprüfen, ob mysql_query eine gültige Ergebnisressource zurückgegeben hat, da andernfalls fetch_ *, num_rows usw. nicht mit dem Ergebnis arbeiten, da dies kein Ergebnis ist! 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 für weitere Informationen.

36
derokorian

Diese Abfrage sollte funktionieren:

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

Das Problem sind einfache Anführungszeichen, daher schlägt Ihre Abfrage fehl und gibt FALSE zurück, und Ihre WHILE-Schleife kann nicht ausgeführt werden. Mit% können Sie alle Ergebnisse abgleichen, die Ihre Zeichenfolge enthalten (z. B. SomeText- $ username-SomeText).

Dies ist einfach eine Antwort auf Ihre Frage. Sie sollten Dinge implementieren, die in den anderen Posts erwähnt werden: Fehlerbehandlung, Verwendung von Escape-Zeichenfolgen (Benutzer können alles in das Feld eingeben, und Sie MÜSSEN sicherstellen, dass es sich nicht um beliebigen Code handelt). Verwenden Sie PDO stattdessen mysql_connect, das jetzt beraubt ist.

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

Unterdrücke manchmal die Abfrage als @mysql_query(your query);

30
Dip Pokhrel

Wenn Sie hier alles versucht haben und es nicht funktioniert, möchten Sie möglicherweise die Sortierung Ihrer MySQL-Datenbank überprüfen. Meins war auf eine schwedische Zusammenstellung eingestellt. Dann habe ich es auf utf8_general_ci geändert und alles hat einfach geklickt.

Ich hoffe das hilft jemandem.

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

Anstelle einer WHERE-Abfrage können Sie diese ORDER BY-Abfrage verwenden. Für die Verwendung einer Abfrage ist dies weitaus besser.

Ich habe diese Abfrage durchgeführt und erhalte keine Fehler wie Parameter oder Boolean.

26
Gears.of.Codes

Versuchen Sie dies, es muss funktionieren, andernfalls müssen Sie den Fehler ausdrucken, um Ihr Problem anzugeben

$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

Versuchen Sie den folgenden Code. Es kann gut funktionieren.

$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

Es kann zwei Gründe geben:

  1. Haben Sie die Verbindung zur Datenbank geöffnet, bevor Sie die Funktion mysql_query aufgerufen haben? Ich sehe das nicht in Ihrem Code. Verwenden Sie mysql_connect, bevor Sie die Abfrage durchführen. Siehe php.net/manual/en/function.mysql-connect.php

  2. Die Variable $ username wird in einer einzelnen Anführungszeichenfolge verwendet, sodass ihr Wert in der Abfrage nicht ausgewertet wird. Die Abfrage wird definitiv fehlschlagen.

Drittens ist die Struktur der Abfrage anfällig für SQL-Injection . Sie können vorbereitete Anweisungen verwenden, um diese Sicherheitsbedrohung zu vermeiden.

21
asim-ishaq

Gehe zu deinem config.php. Ich hatte das gleiche problem Überprüfen Sie den Benutzernamen und das Passwort, und auch SQL Select ist der gleiche Name wie die Konfiguration.

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

Und wenn es einen Benutzer mit einem eindeutigen Benutzernamen gibt, können Sie dafür "=" verwenden. Es gibt keine Notwendigkeit zu mögen.

Ihre Anfrage lautet:

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

Verwenden Sie nicht die veraltete mysql * -Funktion (veraltet in PHP 5.5 wird in PHP 7 entfernt). und Sie können dies mit mysqli oder pdo machen

hier ist die vollständige Auswahlabfrage

<?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

Fügen Sie vor der MySQL-Abfrage eine Verbindungszeichenfolgenvariable ein. Zum Beispiel $connt in diesem Code:

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

Versuche dies

$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

Jedes Mal, wenn Sie die ...

"Warnung: mysqli_fetch_object () erwartet, dass Parameter 1 mysqli_result ist, boolesch angegeben"

... liegt wahrscheinlich an einem Problem mit Ihrer Abfrage. Die prepare() oder query() geben möglicherweise FALSE (ein Boolescher Wert) zurück, aber diese generische Fehlermeldung lässt Sie nicht viel im Weg von Hinweisen. Wie finden Sie heraus, was mit Ihrer Abfrage nicht stimmt? Sie fragen!

Stellen Sie zunächst sicher, dass die Fehlerberichterstattung aktiviert und sichtbar ist: Fügen Sie diese beiden Zeilen unmittelbar nach dem Öffnen des <?php -Tags oben in Ihre Datei (en) ein:

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

Wenn Ihre Fehlermeldung in der php.ini eingestellt wurde, müssen Sie sich darüber keine Gedanken machen. Stellen Sie einfach sicher, dass Sie Fehler mit Sorgfalt behandeln und Ihren Benutzern niemals die wahre Ursache von Problemen mitteilen. Wenn Sie der Öffentlichkeit die wahre Ursache aufdecken, kann dies eine Einladung mit Goldgravur sein, wenn Sie Ihren Websites und Servern Schaden zufügen möchten. Wenn Sie keine Fehler an den Browser senden möchten, können Sie jederzeit die Fehlerprotokolle Ihres Webservers überwachen. Die Speicherorte der Protokolle variieren von Server zu Server. Unter Ubuntu befindet sich das Fehlerprotokoll normalerweise unter /var/log/Apache2/error.log. Wenn Sie Fehlerprotokolle in einer Linux-Umgebung untersuchen, können Sie tail -f /path/to/log in einem Konsolenfenster verwenden, um Fehler so anzuzeigen, wie sie in Echtzeit auftreten ... oder wie Sie sie erstellen.

Sobald Sie mit der Standard-Fehlerberichterstattung fertig sind, erhalten Sie durch Hinzufügen von Fehlerprüfungen für Ihre Datenbankverbindung und Abfragen detailliertere Informationen zu den aktuellen Problemen. Schauen Sie sich dieses Beispiel an, in dem der Spaltenname falsch ist. Zunächst der Code, der die allgemeine schwerwiegende Fehlermeldung zurückgibt:

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

Der Fehler ist allgemein und für Sie bei der Lösung des aktuellen Problems nicht sehr hilfreich.

Mit ein paar weiteren Codezeilen erhalten Sie sehr detaillierte Informationen, mit denen Sie das Problem lösen können sofort. Überprüfen Sie die prepare() -Anweisung auf Richtigkeit, und wenn dies gut ist, können Sie mit dem Binden und Ausführen fortfahren.

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

Wenn etwas nicht stimmt, können Sie eine Fehlermeldung ausspucken, die Sie direkt zum Problem führt. In diesem Fall gibt es keine foo -Spalte in der Tabelle. Die Lösung des Problems ist trivial.

Wenn Sie möchten, können Sie diese Prüfung in eine Funktion oder Klasse aufnehmen und sie erweitern, indem Sie die Fehler wie oben erwähnt ordnungsgemäß behandeln.

12
Jay Blanchard

Überprüfen Sie zunächst Ihre Verbindung zur Datenbank. Ist es erfolgreich verbunden oder nicht?

Wenn es fertig ist, dann habe ich diesen Code geschrieben und es funktioniert gut:

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

Stellen Sie sicher, dass Sie die Datenbank nicht schließen, indem Sie db_close () verwenden, bevor Sie Ihre Abfrage ausführen:

Wenn Sie in einem Skript mehrere Abfragen verwenden, auch wenn Sie andere Seiten einschließen, die Abfragen oder eine Datenbankverbindung enthalten, kann es sein, dass Sie db_close () verwenden, um die Datenbankverbindung zu schließen. Stellen Sie also sicher, dass Sie dies tun Mache diesen Fehler nicht in deinen Skripten.

10
A.Aleem11

Überprüfen Sie zuerst Ihre Verbindung.

Wenn Sie dann den genauen Wert aus der Datenbank abrufen möchten, sollten Sie Folgendes schreiben:

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

Oder Sie möchten den Werttyp LIKE abrufen und dann schreiben:

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

Wenn beim Überprüfen kein MySQL-Fehler auftritt, stellen Sie sicher, dass Sie Ihre Datenbanktabelle ordnungsgemäß erstellt haben. Das ist mir passiert. Suchen Sie nach unerwünschten Kommas oder Anführungszeichen.

9
user1012181

Sie können auch überprüfen, ob $result wie folgt fehlschlägt, bevor Sie das Fetch-Array ausführen

$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

Sie können diesen Code ausprobieren. Ich habe es früher gefunden, als ich auf ein Problem gestoßen bin, das Ihrem ähnelt.

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

In der Regel tritt ein Fehler auf, wenn Ihre Datenbankverbindung fehlschlägt. Stellen Sie daher sicher, dass Sie eine Verbindung zu Ihrer Datenbank herstellen oder die Datenbankdatei einschließen.

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
  • Es wird empfohlen, die Abfrage in sqlyog auszuführen und anschließend in Ihren Seitencode zu kopieren.
  • Speichern Sie Ihre Abfrage immer in einer Variablen und geben Sie diese Variable als Echo aus. Dann gehe zu mysql_query($query_variable);.
6
Engr Zardari

Versuchen Sie diesen Code, es funktioniert gut

weisen Sie der Variablen die Post-Variable zu

   $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

da $ username eine PHP-Variable ist, müssen wir sie als String an mysqli übergeben. Da in der Abfrage, die Sie mit einem einfachen Anführungszeichen begonnen haben, werden wir das doppelte Anführungszeichen, das einfache Anführungszeichen und einen Punkt für die Verkettung verwenden ("'. $ username. '") Wenn Sie mit einem doppelten Anführungszeichen beginnen, würden Sie die Anführungszeichen ('". $ username. "') umkehren.

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

aber die Verwendung von MySQL hat viel an Wert verloren. Verwenden Sie stattdessen PDO. Es ist einfach, aber sehr sicher

3
Dennis Kiptugen

Traditionell war PHP tolerant gegenüber schlechten Praktiken und Fehlern im Code, was das Debuggen ziemlich schwierig macht. Das Problem in diesem speziellen Fall ist, dass sowohl mysqli als auch PDO Ihnen standardmäßig nicht mitteilen, wann eine Abfrage fehlgeschlagen ist, und einfach FALSE zurückgeben. (Ich werde nicht über die deprizierte mysql -Erweiterung sprechen. Die Unterstützung für vorbereitete Anweisungen ist Grund genug, entweder auf PDO oder - umzusteigen. mysqli.) Sie können jedoch das Standardverhalten von PHP so ändern, dass immer Ausnahmen ausgegeben wird, wenn eine Abfrage fehlschlägt.

Für PDO: Verwenden Sie $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();

Dies zeigt Ihnen Folgendes:

Schwerwiegender Fehler: Ungefangene Ausnahme 'PDOException' mit der Meldung 'SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte' emal 'in' Feldliste 'in E:\htdocs\test\mysql_errors\pdo.php in Zeile 8

PDOException: SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'emal' in 'Feldliste' in E:\htdocs\test\mysql_errors\pdo.php in Zeile 8

Wie Sie sehen, erfahren Sie genau, was mit der Abfrage nicht stimmt und wo Sie sie in Ihrem Code beheben können.

Ohne $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); erhalten Sie

Schwerwiegender Fehler: Rufen Sie eine Member-Funktion fetchAll () auf boolean in E:\htdocs\test\mysql_errors\pdo.php in Zeile 9 auf

Für mysqli: Benutze 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();

Sie erhalten

Schwerwiegender Fehler: Ungefangene Ausnahme 'mysqli_sql_exception' mit der Meldung 'Unbekannte Spalte' emal 'in' Feldliste '' in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 8

mysqli_sql_exception: Unbekannte Spalte 'emal' in 'field list' in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 8

Ohne mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); bekommst du nur

Schwerwiegender Fehler: Rufen Sie in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 10 eine Member-Funktion fetch_all () auf

Natürlich können Sie die MySQL-Fehler auch manuell überprüfen. Aber ich würde verrückt werden, wenn ich das jedes Mal tun müsste, wenn ich einen Tippfehler mache - oder noch schlimmer -, wenn ich die Datenbank abfragen möchte.

0
Paul Spiegel