mysqli_fetch_assoc() verwacht dat parameter 1 mysqli_result is, boolean gegeven

Ik ben vrij nieuw in PHP en MySQL en ik kom er maar niet uit. Ik heb het hele forum doorzocht maar geen antwoord gevonden dat ik zinnig kan vinden. Ik gebruikte oorspronkelijk mysql_fetch_assoc() maar ik kon alleen getallen zoeken en ik kreeg ook fouten bij het zoeken naar letters. Ik hoop dat ik hier op de goede weg ben. Bij voorbaat dank voor al je hulp!

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

Antwoord 1, autoriteit 100%

Dit gebeurt wanneer uw resultaat geen resultaat is (maar in plaats daarvan een “false”).
U moet deze regel wijzigen

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

naar dit:

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

omdat de ” $variabelen kan interpreteren terwijl ‘ dat niet kan.

Werkt prima met gehele getallen (getallen), voor strings moet je de $variabele tussen enkele aanhalingstekens zetten, zoals

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

Als je wilt / moet werken met enkele aanhalingstekens, dan KAN php de variabelen NIET interpreteren, je zult het als volgt moeten doen:

$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.';

Antwoord 2, autoriteit 52%

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Dit betekent dat de eerste parameter die je hebt doorgegeven een boolean is (waar of onwaar).

De eerste parameter is $resulten is falseomdat er een syntaxisfout in de query zit.

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

U mag nooit rechtstreeks een verzoekvariabele in een SQL-query opnemen, anders kunnen de gebruikers SQL in uw query’s injecteren. (Zie SQL-injectie.)

U moet ontsnappen aan de variabele:

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

Of beter, gebruik Prepared Statements.


Antwoord 3, autoriteit 10%

U citeert enkel uw SQL-instructie die de variabelen tekst maakt in plaats van variabelen.

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

Antwoord 4, autoriteit 7%

Mysqli maakt gebruik van objectgeoriënteerd programmeren. Probeer in plaats daarvan deze aanpak:

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

Laat het me weten als je vragen hebt, ik kon deze code niet testen, dus je moet hem misschien drie keer controleren!


Antwoord 5

Wat gebeurt er in uw code als $usertablegeen geldige tabel is of geen kolom PartNumber bevat of als onderdeel geen nummer is.

Je moet $partid escapen en ook het document lezen voor mysql_fetch_assoc() omdat het een boolean kan retourneren

Other episodes