mysqli_num_rows($rResult) == 0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tortuga web

tortuga web

02/04/2014 17:53:23
Quote Anchor link
De overstap naar OOP is mij nog te groot, dus eerst mijn MySQL script naar MySQLi procedureel opgewaardeerd. Het werkt bijna, maar loop nog tegen één foutje aan.
Ik heb een script om nieuwsberichten te kunnen plaatsen, maar het kan ook zijn dat er nog geen nieuws is, en bijgevolg de database nog leeg. Daar om heb ik het volgende stukje script opgenomen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
elseif ( mysqli_num_rows($rResult) == 0 ) {
        $aErrors[] = 'Er zijn geen nieuwsberichten!';

Ik krijg nu de foutmelding: "Warning: mysqli_query() expects parameter 1 to be mysqli, ".
In de oude versie had ik hier staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
elseif ( mysql_num_rows($rResult) == 0 ) {
        $aErrors[] = 'Er zijn geen nieuwsberichten!';

Voor wat ik met al jullie hulp en goede raad gevonden heb is hier de toevoeging i voldoende. Wat gaat hier fout?
 
PHP hulp

PHP hulp

25/04/2024 10:41:33
 
Obelix Idefix

Obelix Idefix

02/04/2014 18:08:04
Quote Anchor link
Gaat de foutmelding over dezelfde regel als waar die elseif staat?
Heb je al gezocht wat die foutmelding inhoudt?
Hier kan het toevoegen van alleen de i voldoende zijn, maar heb het idee dat de foutmelding op een andere regel betrekking heeft.
Gewijzigd op 02/04/2014 18:09:12 door Obelix Idefix
 
Tortuga web

tortuga web

02/04/2014 18:30:16
Quote Anchor link
Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in /home/.../nieuws.inc.php on line 15
Tot aan lijn 15 is de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
    $aErrors = array();
    require_once ('script/db_config.php');

    //  Construeer een opdracht voor de database
    $sQuery = "SELECT  nieuws_id,
                    titel,
                    bericht,
                    datum
            FROM nieuws
            ORDER BY nieuws_id DESC";
    //  Stuur de opdracht op
    $rResult = mysqli_query( $rLink, $sQuery );


Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /home/.../nieuws.inc.php on line 20
En op lijn 20 staat de elseif-code zoals in de vraag benoemd.

Ik heb gegoocheld op die foutmelding, maar kom er niet achter en voor wat ik kan vinden zou ik de omzetting goed gedaan moeten hebben.
Gewijzigd op 02/04/2014 18:34:04 door tortuga web
 
Obelix Idefix

Obelix Idefix

02/04/2014 18:39:00
Quote Anchor link
Heb je ook foutafhandeling in je code staan (is er wel een verbinding met de database)?
Gewijzigd op 02/04/2014 18:39:32 door Obelix Idefix
 
Tortuga web

tortuga web

02/04/2014 18:47:38
Quote Anchor link
Ja, de eerste if, dus voordat de elseif komt controleert de verbinding met de database, dus die is er. De fout zit m in de elseif, maar ik snap m niet
 
Obelix Idefix

Obelix Idefix

02/04/2014 19:04:35
Quote Anchor link
Tortuga web op 02/04/2014 18:47:38:
Ja, de eerste if, dus voordat de elseif komt controleert de verbinding met de database, dus die is er. De fout zit m in de elseif, maar ik snap m niet


Ik zie geen if in de code staan. Ik ga er van uit dat die op regel 16 begint (aangezien de elseif doorgaans er na komt).
De foutmelding geeft aan dat de fout op regel 15 zit, dus voor de elseif en ook voor de if. Als je die 1e foutmelding oplost, zal de 2e foutmelding (over regel 20, de elseif) vermoedelijk ook opgelost zijn.

Blijft voor mij de vraag wat er zit in $rLink
Gezien de foutmelding (mysqli_query() expects parameter 1 to be mysqli, resource given) wordt daar niet het juiste meegegeven.
Vandaar de vraag: is er een databaseverbinding?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/04/2014 19:15:46
Quote Anchor link
Tortuga web op 02/04/2014 17:53:23:
Warning: mysqli_query() expects parameter 1 to be mysqli


Het kan nooit al te moeilijk zijn.

Uiteindelijk moet je iets hebben als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$link
= mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}


if ($result = mysqli_query($link, "SELECT Code, Name FROM Country ORDER BY Name")) {

    /* determine number of rows result set */
    $row_cnt = mysqli_num_rows($result);

    printf("Result set has %d rows.\n", $row_cnt);

    /* close result set */
    mysqli_free_result($result);
}

?>

Die $result is bij jou niet geldig.

Mogelijke oorzaken:
- Je probeert de $result variabele buiten de scope te gebruiken. (binnen een (andere) functie misschien).
- Je query is mislukt waardoor de teruggegeven $result de waarde FALSE heeft gekregen. Je kunt dat checken met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if($result === false)
    echo 'result is ongeldig';
?>
Gewijzigd op 02/04/2014 19:16:29 door Frank Nietbelangrijk
 
Tortuga web

tortuga web

02/04/2014 19:42:11
Quote Anchor link
Dank je Frank. Nu snap ik beter wat er gebeurde en heb de fout gevonden. Die zat in een stom tikfoutje in de config.php, waar ik de database aanroep. Dus de 'Volslanke' met z´n slimme hondje had gelijk, de fout zit niet in regel 20, nadat ik de verbinding controleer, maar ervoor. En als er dan dus een fout zit in het aanroepen van de database, meldt ie al niet meer dat de verbinding niet gelukt is.
Tjonge, het valt me nog niet mee, al dat scripten...
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/04/2014 23:53:05
Quote Anchor link
Fijn dat je het hebt kunnen oplossen.

Zorg dat je goed naleest wat iedere functie die je aanroept ( zoals mysql_connect() en mysql_query() ) als mogelijk resultaat terug kunnen geven. dat staat op de PHP website voor iedere functie aangegeven. Bouw aan de hand daarvan dus inderdaad foutafhandeling in zodat het zichtbaar wordt als er iets niet goed gaat. Dat scheelt een boel zoekwerk.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/04/2014 09:00:06
Quote Anchor link
Eigenlijk is het veel makkelijker om het om te bouwen naar de OOP versie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mysql
= new mysqli('localhost', 'wortel', 'pwd', 'db4me');
// en dan in je editor search mysql_ replace with $mysql->
?>
 
Dos Moonen

Dos Moonen

03/04/2014 09:25:00
Quote Anchor link
Ger van Steenderen op 03/04/2014 09:00:06:
Eigenlijk is het veel makkelijker om het om te bouwen naar de OOP versie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mysql
= new mysqli('localhost', 'wortel', 'pwd', 'db4me');
// en dan in je editor search mysql_ replace with $mysql->
?>


$GLOBALS['mysqli']-> bedoel je. $mysqli bestaat binnen functies niet, $GLOBALS wel.
Gewijzigd op 03/04/2014 09:25:23 door Dos Moonen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.