Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Mysqli_num_rows() non funziona

    Salve a tutti.

    Per controllare se un record esiste uso una routine in MySQLI che funziona perfettamente,
    per ragioni di sicurezza, e per abituarmi a scrivere codice migliore, sto cercando di sostituire
    questa routine con una che utilizza i 'prepared statement'.

    Questa č la routine :

    <PHP>

    <?php
    $mysqli = new mysqli("localhost", "root", "", "sacradomus");
    $email = "roma@libero.it";




    $query = "SELECT anaEmai FROM Anagrafe WHERE anaEmai =?";
    $statement = $mysqli->prepare($query);
    $statement->bind_param('s', $email);
    $statement->execute();
    $rowcount= ($statement);
    printf("Il recordset ha %d righe .\n",$rowcount);
    $statement->bind_result($ema);
    $rowcount=mysqli_num_rows($statement);
    printf("Il recordset ha %d righe .\n",$rowcount);

    print '<table border="1">';
    while($statement->fetch()) {
    print '<tr>';
    print '<td>'.$ema.'</td>';

    print '</tr>';


    }
    print '</table>';
    $statement->close();

    </PHP>


    Quando eseguo ricevo due warnings :

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\EASYPHP\eds-www\prova.php on line 10

    Il recordset ha 0 righe .
    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\EASYPHP\eds-www\prova.php on line 13
    Il recordset ha 0 righe .

    Lo strano e' che mi dice che il 'recordset' ha 0 righe e poi stampa correttamente il campo della
    email tornata dalla select.

    Se arriva alla stampa dovrebbe essere, almeno come sintassi, corretta, trova il record, lo aggiunge al 'recordset' lo stampa ma torna zero a num_rows().

    E' vero ho due warnings ma cercando su internet ho trovato una proposta di soluzione che
    trasforma i warnings in error e quindi...

    .ps ho messo i tags per il codice ma pare non funzionino.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Stai mischiando la versione ad oggetti con quella procedurale, o usi una, oppure usi l'altra, quindi
    $mysqli->affected_rows
    e non
    mysqli_num_rows($statement)

  3. #3
    @Alhazred Grazie.
    Ora funziona.
    Per caso puoi suggerirmi un buon testo che tratti di MySQLI e PHP ? Senza un minimo di base non credo riusciro' mai
    a realizzare nulla di valido.
    Grazie di nuovo.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Sinceramente, visto che sei in fase iniziale di apprendimento, io ti consiglierei di usare direttamente PDO, ma non posso aiutarti riguardo un libro da comprare, non ne ho letti.

  5. #5
    @Alhazred
    Visto che non ho alcuna premura...dal mese prossimo saro' in pensione, provero' PDO, con la programmazione ad oggetti ho sempre sofferto, ma temo non ci siano alternative, prima o poi ogni linguaggio finisce in OOP.
    Grazie

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Aldilā dell'uso di PDO o mysqli che sono soltanto strumenti l'importante č di conoscere SQL.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    @badaze
    Concordo con te, anche se ribadisco che l'esistenza di manuali chiari in ordine alle best practice(s)
    per quanto attiene la sintassi sarebbe assai utile.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.