query con PDO

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
usando il classico metodo della query per renderla dinamica si puo fare es
PHP:
<?php
//...
$wh="";
if($nome !=""){
	$wh =" AND nome='$nome' ";
}
$ris=mysql_query("SELECT * FROM mia_tab WHERE 1=1 $wh");
//...
?>
utilizzando le PDO
così
PHP:
<?php
//....
$stm = $pdo->query("SELECT * FROM mappe WHERE 1=1 $wh");
//...
?>
oppure
PHP:
<?php
//...
$stm = $pdo->prepare("SELECT * FROM mappe WHERE 1=1 ?");
$stm->execute($wh);
//...
?>
analogo discorso per le altre eventuali clausole della query es
PHP:
<?php
//....
$stm = $pdo->query("SELECT * FROM mappe WHERE 1=1 $wh ORDER BY $nome_campo");
//...
?>
oppure
PHP:
<?php
//...
$stm = $pdo->prepare("SELECT * FROM mappe WHERE 1=1 ? ORDER BY ?");
$stm->execute($wh, $nome_campo);
//...
?>
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
I prepared statements servono a due cose:
  1. Ti consentono di passare valori provenienti dall'input in tutta sicurezza.
  2. Velocizzano l'esecuzione di query simili, perché parte dei dati viene riutilizzata.
Nel tuo caso nessuno degli esempi funzionerà perché PDO metterà automaticamente gli apici singoli attorno alla clausola WHERE o ORDER BY, trattandolo come un dato in input. Puoi usare quella tecnica solamente per i campi.

Io avrei fatto qualcosa simile a questo:
PHP:
$wh = '';
$params = array();

if ($nome != '') {
    $wh .= ' AND nome = :nome';
    $params[':nome'] = $nome;
}

// sia $pdo un'istanza di PDO

$stm = $pdo->prepare("SELECT * FROM tabella WHERE 1 = 1{$wh}";
$stm->execute($params);

print_r($stm->fetchAll(PDO::FETCH_ASSOC));
Come vedi qui i parametri hanno un nome, anche se puoi benissimo usare il punto interrogativo finché sono in ordine. Usare il nome è anche utile in fase di debug (se una query va male puoi vedere subito i valori dei vari parametri senza andarli a contare).
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
l'ho letto, ma sei sicuro che l'autore sia affidabile? :rolleyes:

comunque per iniziare va benissimo, ma secondo me il SOMMO e/o il vampiro potrebbero preparare un articolo (tabella comparativa) con le corrispondenze tra le "vecchie" istruzioni e quelle pdo (!!!non in ostrogoto, ma nel linguaggio di dante).
es.
$ci_sono=mysql_num_rows($query)
la pdo ?
ecc...

poi ti faccio un es. dopo aver letto dello stesso autore le istru alla phpmailer, l'ho scaricata (fatta copia di bck) e aperta, pian piano mi sono letto tutte le istruzioni capendo (sin dove sono potuto arrivare col mio infimo q.i.) cosa e come poteva fare, ma con la pdo non mi sembra di poterlo fare (non esiste pdo.php, immagino)
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Credo che dovrai fare pace con l'Inglese: molta documentazione (non parlo di PDO in particolare, magari la versione in Italiano c'è anche) si trova solo in questa lingua, specialmente quando si tratta di progetti nuovi. :p
In ogni caso, i nomi delle funzioni sono piuttosto auto-descrittivi. Devi solo stare attento a distinguere tra i metodi della classe PDO e quelli di PDOStatement.
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Con borgo al massimo si deve linkare documentazione in dialetto :book:
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
es.
$ci_sono=mysql_num_rows($query)
la pdo ?

Ci sarebbe PDOStatement::rowCount(), ma ora ti rivelo una cosa, PDO è ottima come alternativa alla libreria MySQL ma in quanto ad astrazione non è un granché, il metodo rowCount() per esempio non funziona con alcuni DBMS.
Per cui consiglio sempre di passare SELECT COUNT(*) a PDO::query() + fetchColumn() per simulare mysql_num_rows().

Ad esempio:
PHP:
$query = "SELECT COUNT(*) FROM tbl WHERE cmp > 10";
if ($rs = $cn->query($query)) {

  if ($rs->fetchColumn() > 0) {
 //.....
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto ringrazio tutti per le risposte.
@alex: mi sa di sì
@luigi777: leggo e ti so dire (però meglio COT che CRUD)
@vampiro: al che si dimostra che la vecchia "a spagetti" è meglio (chi lascia la via vecchia per la nuova presto o tardi mal si ritrova)
@nefty: non conosco il dialetto, sono nato dove manzoni ha sciacquato i panni
:)
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
In realtá PDO è parte di una mistificazione che sta coinvolgendo pesantemente PHP negli ultimi anni; si tenta di dargli una "dignitá" che a qualcuno sembra manchi per il solo fatto che è un liguaggio semplice per sua natura.
Allora vai con i traits per supplire alle mancanze dell'ereditarietá, namespaces per ripetersi impunemente, goto per spaghettare, MVC e mokey per non perdere terreno rispetto a Ror.
Il tutto senza ancora un supporto decente per Unicode.
Ma non dirlo a nessuno :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
T Query con date MS Access 1
L Query e selezione DB con $_POST PHP 2
O problema con query PHP 4
G Query con i giorni della settimana MySQL 10
T Query su due tabelle con totali Database 4
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
G Menù a tendina di ricerca con query PHP 1
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
R Aiuto con le query MS Access 2
M Problemi con query a più tabelle PHP 3
F query e form con select multipla PHP 17
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
O query con date in formato stringa PHP 3
M [PHP] Problema con query select PHP 2
M [PHP] Problemi con query unione PHP 11
D [Visual Basic] [MS Access] query con parametro di testo Visual Basic 4
L [PHP] IF con risultato query PHP 7
V [MySQL] problema query con date su server MySQL 5
P Query Mysql con Join PHP 2
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
D [MySQL] Tabelle "molti a molti", SELECT con troppe QUERY MySQL 7
P [PHP] Query con variabile PHP 2
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
Laskot Query al DB con php (INSERT) PHP 2
P [MYSQL] Query su tabelle con clausola "essenziale" MySQL 10
S [PHP] Più fetch_array con unica query... PHP 9
sandropochi [PHP] Query per estrarre record con data successiva a quella odierna PHP 2
A Query mssql su mysql con linked server Database 0
D Problema con query in php PHP 5
M [PHP] Problema con query PHP 17
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
Rikk73 [C#] problema con stampa da query linq EnumerableRowCollection .NET Framework 0
M Visualizzare su più pagine risultato query con fpdf PHP 6
M Problema con query PHP 15
P Query con Somma di un Campo , aggregazione e join Database 3
F Tabella con prima colonna con i risultati di una query PHP 1
M Problemi con query su due tabelle PHP 2
G Problema con una query. PHP 5
S Query con GETDATE() su SQL2008 R2 EXPRESS Database 1
D aiuto con query PHP 1
E Problemi auto increment con query Insert Into Select MySQL 2
A impostare una query con operatori condizionali MySQL 1
C Query con campo a valori multipli MS Access 0
M query con php "dinamica" PHP 2
M Access-Query per creare una tabella con la data nel nome tabella MS Access 0
N Cacolo con query PHP 11
A query con excel PHP 0
D Raggruppare dati query con php PHP 1

Discussioni simili