En dus geen $sql = "SELECT bla....." in je functie zelf.
$sqlUitlezen kan je dan met een if-else controleren of deze gelukt is, of niet.. en in dat geval met mysqli_error($connection); tonen wat er fout gaat.
Als je dus foutafhandeling toevoegt, dan zie je een fout van MySQL.
Zonder foutafhandeling: PHP zegt dat het fout gaat, omdat de invoer wat de query krijgt niet klopt.
Met foutafhandeling: PHP zegt dat er wat misgaat met de query.
Foutafhandeling mét mysqli_error($connection): PHP zegt dat er wat misgaat in MySQL en laat de foutmelding van MySQL zien.
Werkt prima en is gewoon toegestaan. Of het verstandig is om zo te programmeren is een tweede. De kans is namelijk aanwezig dat je de volgende fout maakt:
<?php
if ($test = false) {
// dit wordt nooit uitgevoerd, want de geevalueerde waarde
// van de toekenning, en daarmee het if-statement, is false
}
?>
Omdat je eigenlijk het volgende bedoelde:
<?php
if ($test == false) {
// wordt uitgevoerd als $test equivalent is aan false
}
?>
Vaak worden om die reden waarde en variabele omgedraaid:
<?php
if (false == $test) {
// wordt uitgevoerd als $test equivalent is aan false
}
?>
Omdat je dan, als je dan een =-teken vergeet, een foutmelding krijgt.
Dit is wederom een vraagstuk waarbij het probleem niet het probleem is, maar de aanpak. Alles begint bij het goed lezen van de foutmelding, hier staat letterlijk alle informatie in die je nodig hebt:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given
Laat dit even bezinken. Lees het eens hardop voor. De eerste parameter van mysqli_num_rows() zou een object moeten zijn van het type mysqli_result, maar dit was een boolean (waarschijnlijk de waarde false). Deze is op zijn beurt afkomstig uit mysqli_query(). We pakken de documentatie erbij. Wat we willen weten is: wanneer retourneert mysqli_query() een bools resultaat? Of, algemener, wat kan mysqli_query() uberhaupt allemaal retourneren? En wat betekenen deze waarden? Dit staat onder het kopje Return Values. Hier staat:
[color=#ff0000]Returns FALSE on failure.[/color] For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
We zouden ten overvloede simpelweg de waarde van $sqlUitlezen kunnen dumpen naar het scherm met behulp van var_dump() ofzo, maar nu staat het al min of meer vast (daar het een SELECT query betreft) dat er iets misgaat bij de uitvoering van de query. Meestal betekent dit op zijn beurt weer dat de SQL een verkeerde syntax (opbouw) heeft.
Een verdere (en vrij korte) analyse van de mogelijke SQL-vormen zou je dan moeten leiden naar de veroorzaker van de foutmelding, zoals al correct werd opgemerkt door @Rob: de plaatsing van het WHERE-onderdeel is verkeerd.
Het probleem hier is dus (wederom) niet de concrete foutmelding, maar het ontbreken van handvaten noch het hebben van een strategie voor het boven water krijgen van wat er misgaat. Dit begint met het analyseren van de foutmelding en duidelijkheid verkrijgen over de toestand (waarden) van de betrokken variabelen. Dit heet in de volksmond ook wel debuggen.
Debuggen is bij uitstek geschikt om te leren programmeren want het dwingt je om inhoudelijk te doorgronden wat er achtereenvolgens in je programma gebeurt. Als je dit gewoon systematisch doet dan leidt dit je vrijwel altijd rechtstreeks naar de veroorzaker van de problemen.