Fatal error: Call to a member function fetch_assoc() on a non-object
Door
J C
op 16-02-2015 01:12
gewijzigd op 16-02-2015 01:18
2.859 views
Ik zit te stoeien met een query. Volgens mij geeft de foutmelding aan dat de query niet klopt, maar ik kan de fout niet vinden, de tabellen, kolommen en db bestaan allemaal. En voor zover ik het kan vinden is INNER JOIN nog steeds toegestaan.
Ik heb de qry ingevoerd in phpmyadmin. Als ik het vraagteken vervang door een waarde, dan werkt het gewoon en geeft hij de juiste gegevens weer.
=> mysqli::prepare returns a statement object or FALSE if an error occurred.
=> mysqli_stmt::bind_param Returns TRUE on success or FALSE on failure.
=> mysqli_stmt::execute Returns TRUE on success or FALSE on failure.
=> mysqli::store_result Returns a buffered result object or FALSE if an error occurred.
Hoewel al deze bovenstaande functies (of beter methods) allemaal iets teruggeven doe jij daar helemaal niets mee.
Kun je me aangeven wat ik er mee zou kunnen doen? Ik heb een aantal tutorials gevolgd over mysqli, maar de meeste geven aan dat ik het zo zou moeten doen.
Het is eigenlijk een algemeen verhaal. Functies - eigen gemaakte of standaard PHP - kunnen een waarde retouneren:
<?php
function saySomething()
{
return 'Hello JC';
}
$a = saySomething();
echo $a;
?>
Zo dus ook de bovengenoemde functies.
<?php
$statement = $connection->prepare($qry);
if(!$statement)
echo 'mysqli::prepare gaf FALSE terug!';
$statement->error; //var_dump($statement);
if(!$statement->bind_param('i', $_GET['mw_id']))
echo 'mysqli_stmt::bind_param gaf FALSE terug!';
if(!$statement->execute())
echo 'mysqli_stmt::execute gaf FALSE terug!';
?>
en bij statement store_result gaat het helemaal fout want deze functie geeft het resultaat terug en die heb je dus nodig voor verdere verwerking
<?php
//$statement->store_result();
$result = $statement->store_result();
if(!$result)
echo 'mysqli::store_result gaf FALSE terug!';
Persoonlijk zou ik geen prepared statements gebruiken in combinatie met MySQLi mede (maar niet uitsluitend) omdat je code wolliger wordt, wat de kans op fouten vergroot. Ook het debuggen kost dan vervolgens meer tijd.
Is er een specifiek reden waarom je deze variant hebt verkozen boven het alternatief ((real_)query() icm escapen DATA-delen en filteren van invoer) die, naar mijn mening, schonere (en zeker kortere) code oplevert?
Zeker als de enige parameter $_GET['mw_id'] is in de query en deze nummeriek is zou ik gaan voor intval($_GET['mw_id']) en mysql injection is onmogelijk.
Persoonlijk zou ik geen prepared statements gebruiken in combinatie met MySQLi mede (maar niet uitsluitend) omdat je code wolliger wordt, wat de kans op fouten vergroot. Ook het debuggen kost dan vervolgens meer tijd.
Is er een specifiek reden waarom je deze variant hebt verkozen boven het alternatief ((real_)query() icm escapen DATA-delen en filteren van invoer) die, naar mijn mening, schonere (en zeker kortere) code oplevert?
uhm, om heel kort, maar niet onbeleefd te zijn, omdat ik geen idee heb waar je het over hebt. De bovenstaande methode wordt als veilige manier in de tutorials omschreven.