Visualizzazione dei risultati da 1 a 5 su 5

Discussione: select su DataBase

  1. #1

    select su DataBase

    Salve a tutti:

    per fare una select su un Database che mi estragga tutti i valori in base ad un parametro che ho messo da input
    $CodStaz = $ARGV[1];

    E' corretto usare il punto interrogativo in questo modo?
    $select_str = "SELECT * FROM dati WHERE CodStaz = ?";

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    ammesso che tu abbia installato DBI, che il tuo DB sia MySQL e che tu abbia installato DBD::MySQL

    $nomeDB="NOME DB";#Nome Database
    $host="HOST";#Nome Host Database
    $utente="USER";#Nome user Database
    $password="PASSWORD";#Password Database

    use DBI();
    $dbh = DBI->connect("DBI:mysql:database=$nomeDB;host=$host"," $utente","$password");

    $sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz = '?'");

    #? tra '' rappresenta il filtro di ricerca e CodStaz il campo di ricerca

    $sth->execute();
    while($ref=$sth->fetchrow_hashref())
    {
    #Questo ciclo mostra ogni singola riga
    #Per leggere ciò che è scritto in un campo, riga per riga usa: $ref->{'NOMECAMPO'} qui dentro
    }
    $sth->finish();


    alternativa:

    $sth->$sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz = '?'");
    $sth->execute();
    while(@ref=$sth->fetchrow_array())
    {
    #Questo ciclo mostra ogni singola riga
    #@ref è un array che contiene i tuoi dati
    }
    $sth->finish();

    Spero di aver capito correttamente ciò che chiedevi

  3. #3
    ritengo che Kribbio74 si riferisse al meccanismo dei "segnaposto".

    l'uso esatto è il seguente:

    codice:
    use DBI();
    $dbh = DBI->connect("DBI:mysql:database=$nomeDB;host=$host","$utente","$password");
    
    $sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz = ?");
    # da notare senza ''
    
    $sth->execute("cio_che_devi_cercare");
    DBI sostituirà a ? il parametro passato al metodo execute per cui in realtà la query effettiva sarà:

    $sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz = 'cio_che_devi_cercare'");

    questo meccanismo è utile quando si devono fare ricerche usando la stessa quesry ma parametri diversi (aumentano le prestazioni), ad esempio:


    codice:
    use DBI();
    $dbh = DBI->connect("DBI:mysql:database=$nomeDB;host=$host","$utente","$password");
    
    $sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz > ? AND CodStaz < ?");
    
    for ($i = 0; $i <= $qualcosa; $i++) {
        $sth->execute($i, $i + 10);
        .... valuti i risultati
    }
    
    $sth->finish();
    un altro caso in cui è utile questo meccanismo è quando devi fare richerche con stringhe che potrebbero contenere caratteri pericolosi, ad esempio:

    $sth = $dbh->prepare("SELECT * FROM dati WHERE CodStaz = ?");
    # da notare senza ''

    $sth->execute("O'Really");

    # notare la '
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    Originariamente inviato da shishii
    ritengo che Kribbio74 si riferisse al meccanismo dei "segnaposto".
    Ops! Hai ragione!

  5. #5
    Avevi ragione Shishii, era proprio quello che dicevi te, mancava il parametro sull'execute (CodStaz). Scusa per la mia ignoranza, piano piano ce la farò.
    Ora sono dietro al modulo CGI per tutto ciò che riguarda il WEB: speriamo bene; mi sa che vi tartasserò ancora con un pò di domande; abbiate pazienza.
    Grazie per ora, a presto.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.