it-swarm.com.de

mysqli_fetch_assoc () erwartet, dass Parameter 1 mysqli_result ist (boolean)

Mögliches Duplizieren:
PHP: Warning: sort () erwartet, dass Parameter 1 ein Array ist, Ressource angegeben

Ich bin ziemlich neu für PHP und MySQL und ich kann das einfach nicht herausfinden. Ich habe im ganzen Forum gesucht, aber keine Antwort gefunden, die ich verstehen kann. Ursprünglich verwendete ich mysql_fetch_assoc (), aber ich konnte nur nach Zahlen suchen und erhielt auch Fehler bei der Suche nach Buchstaben. Ich hoffe, dass ich hier auf dem richtigen Weg bin. Vielen Dank im Voraus für all Ihre Hilfe!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>");
mysqli_select_db($con, $dbname);

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = 'SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid';

    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_assoc($result);

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}
9
user1504463

Dies geschieht, wenn Ihr Ergebnis kein Ergebnis ist (stattdessen ein "false") . Sie sollten diese Zeile ändern

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid';

zu diesem:

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid";

weil das "kann $ variables 'nicht' interpretieren '.

Funktioniert gut mit ganzen Zahlen (Zahlen). Für Strings müssen Sie die $ -Variable in einfache Anführungszeichen setzen, wie zum Beispiel

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' ";

Wenn Sie mit einfachen Anführungszeichen arbeiten wollen/müssen, kann PHP die Variablen NICHT interpretieren. Sie müssen dies folgendermaßen tun:

 $sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.';
22
Sliq
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Dies bedeutet, dass der erste Parameter, den Sie übergeben haben, ein Boolean ist (true oder false).

Der erste Parameter ist $result und false, da die Abfrage einen Syntaxfehler enthält.

" ... WHERE PartNumber = $partid';"

Sie sollten eine Anforderungsvariable niemals direkt in eine SQL-Abfrage einschließen, andernfalls können die Benutzer SQL in Ihre Abfragen einfügen. (Siehe SQL-Injection .)

Sie sollten die Variable entziehen:

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';"

Oder besser: Prepared Statements .

14
Arnaud Le Blanc

Sie zitieren einfach Ihre SQL-Anweisung, die die Variablen anstelle von Variablen zum Text macht.

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid";
4
johnmadrak

Mysqli verwendet objektorientierte Programmierung. Verwenden Sie stattdessen diesen Ansatz:

function dbCon() {
        if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false;
}

if(!dbCon())
exit("<script language='javascript'>alert('Unable to connect to database')</script>");
else $con=dbCon();

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = "SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid";

    $result=$con->query($sql_query);
    $row = $result->fetch_assoc();

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}

Lassen Sie mich wissen, wenn Sie Fragen haben, ich konnte diesen Code nicht testen, daher müssen Sie ihn vielleicht dreimal überprüfen!

2
Ben Ashton

Was passiert in Ihrem Code, wenn $usertable keine gültige Tabelle ist oder keine Spalte PartNumber oder Teil enthält, ist dies keine Zahl.

Sie müssen $ partid mit Escapezeichen versehen und auch das Dokument für mysql_fetch_assoc () lesen, da es einen Boolean zurückgeben kann

0
TerryE