PDA

Visualizza la versione completa : select su DataBase


kribbio74
18-09-2006, 13:12
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 = ?";

MARTEDI
18-09-2006, 16:04
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

shishii
19-09-2006, 20:43
ritengo che Kribbio74 si riferisse al meccanismo dei "segnaposto".

l'uso esatto è il seguente:



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:




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 '

MARTEDI
20-09-2006, 10:03
Originariamente inviato da shishii
ritengo che Kribbio74 si riferisse al meccanismo dei "segnaposto".


Ops! Hai ragione! :)

kribbio74
26-09-2006, 16:01
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.

Loading