Esercizio PDO

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Dove il seguente esercizio è sbagliato?

PHP:
<?php
try{
    $dbh= new PDO("mysql:host=localhost; dbname=prova","bismark","bismark");
    //Prepariamo la query con il metodo prepare()
            $st=$dbh->prepare("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES(:id,:nome,:cognome,:nascita)");
                       
            $st->bindParam(':id', $id);
            $st->bindParam(':nome',$nome);
            $st->bindParam(':cognome',$cognome);   
            $st->bindParam(':nascita',$nascita);
           
//Inserisco la prima riga
           
$id=1;
$nome='Nome1';
$cognome='Cognome1';
$nascita=1980;


   
}catch(PDOException $e)
{
    echo 'Errore: ' . $e->getMessage();
}
           
?>
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sto anch'io studiando la pdo, quindi può essere che sbagli, ma mi sembra che dopo
$id=1;
$nome='Nome1';
$cognome='Cognome1';
$nascita=1980;
manchi
$st->execute();
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Inoltre tu dichiari i parametri da inserire dopo

PHP:
$id=1;
$nome='Nome1';
$cognome='Cognome1';
$nascita=1980;
$st->bindParam(':id', $id);
$st->bindParam(':nome',$nome);
$st->bindParam(':cognome',$cognome);   
$st->bindParam(':nascita',$nascita);
$st->execute();
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Andando per logica o almeno per come lo utilizzo di solito mi è sembrato strano che chiamasse le funzioni prima che siano settate le variabili da passare invece ora ho visto che in bindParam() la variabile è passata tramite referenza quindi si, si puo fare anche cosi al contrario di bindValue() che invece passa direttamente il valore senza referenza quindi nel caso non sia settata genera un notice, direi buono a sapersi
 
Ultima modifica:

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Se scrivo il codice in questa maniera:

Codice:
$id=1;
            $nome='Nome1';
            $cognome='Cognome1';
            $nascita=1980;
            
            $st->bindParam(':id', $id);            
            $st->bindParam(':nome',$nome);
            $st->bindParam(':cognome',$cognome);   
            $st->bindParam(':nascita',$nascita);
            $st->execute();

funziona. Quindi i valori vanno dichiarati prima di bindparam e poi dopo bindparam deve essere chiamato il metodo execute()

@borgo italia: Guarda anche io sto studiando Php da poco. Anzi...fino a qualche mese fa credevo che il db fosse un panino da mangiare. In poco tempo mi sono ritrovato ad avere a che fare con i concetti dell'O.O. e poi PDO, ORM MVC ecc ecc. La cosa comica è che facendo alcune domande ad un programmatore Php su questi argomenti, mi ha detto...ma stai studiando gli argomenti avanzati del php? Sembra che in azienda dove lavora non sanno nemmeno cosa sia l'ORM. Ora capisco perchè Php ha un brutto nome.
 
Ultima modifica:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Se scrivo il codice in questa maniera:

Codice:
$id=1;
            $nome='Nome1';
            $cognome='Cognome1';
            $nascita=1980;
            
            $st->bindParam(':id', $id);            
            $st->bindParam(':nome',$nome);
            $st->bindParam(':cognome',$cognome);   
            $st->bindParam(':nascita',$nascita);
            $st->execute();

funziona. Quindi i valori vanno dichiarati prima di bindparam e poi dopo bindparam deve essere chiamato il metodo execute()
Come postato sopra, puoi anche metterli dopo dato che vengono passati tramite referenza e non vengono valutati fino all'execute()
 

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Come postato sopra, puoi anche metterli dopo dato che vengono passati tramite referenza e non vengono valutati fino all'execute()

Se metto le variabili dopo il bind mi segnala un errore sull'IDE. In particolare dice che le variabili non sono inizializzate. Quindi vanno messe prima del bindParam
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Il codice è inutilmente complicato e fa un uso sbagliato dei blocchi try/catch:
PHP:
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=prova', 'bismark', 'bismark');
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $dbh->prepare('INSERT INTO anagrafica (id, nome, cognome, nascita) VALUES (:id, :nome, :cognome, :nascita)');

try {
    $stm->execute(array(
        ':id'      => 1,
        ':nome'    => 'Nome1',
        ':cognome' => 'Cognome1',
        ':nascita' => 1980,
    ));
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}
 

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Il codice è inutilmente complicato e fa un uso sbagliato dei blocchi try/catch:
PHP:
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=prova', 'bismark', 'bismark');
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $dbh->prepare('INSERT INTO anagrafica (id, nome, cognome, nascita) VALUES (:id, :nome, :cognome, :nascita)');

try {
    $stm->execute(array(
        ':id'      => 1,
        ':nome'    => 'Nome1',
        ':cognome' => 'Cognome1',
        ':nascita' => 1980,
    ));
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

Conosci qualche guida chiara sul PDO in Php. Ogni nuova guida che leggo mi confonde sempre di più le idee
 

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Il codice è inutilmente complicato e fa un uso sbagliato dei blocchi try/catch:
PHP:
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=prova', 'bismark', 'bismark');
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $dbh->prepare('INSERT INTO anagrafica (id, nome, cognome, nascita) VALUES (:id, :nome, :cognome, :nascita)');

try {
    $stm->execute(array(
        ':id'      => 1,
        ':nome'    => 'Nome1',
        ':cognome' => 'Cognome1',
        ':nascita' => 1980,
    ));
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

Comunque venendo a noi. Nel codice che hai scritto...

Anzitutto ti sei connesso al db mettendo l'istruzione in un blocco Try/catch. Poi hai impostato l'attributo a PDO::ATTR_ERRMODE al valore PDO::ERRMODE_EXCEPTION

Poi hai preparato la query con il metodo prepare, ed infine l'hai eseguita con execute. Se è giusto, come si fa ad inserire più di un valore nel db?

Ps: Però hai saltato il metodo BindParam()
 
Ultima modifica:

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Questo codice funziona:

Codice:
<?php

//Connessione al db con PDO

try{
    $objPDO=new PDO ('mysql:host=localhost;dbname=anagrafica','fabio','fabio');
    echo 'Connessione avvenuta con successo...';
    $objstatement1=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (1,'Nome1','Cognome1',1975)");
    $objstatement2=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (2,'Nome2','Cognome2',1974)");
    $objstatement3=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (3,'Nome3','Cognome3',1980)");
    $objstatement4=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (4,'Nome4','Cognome4',1985)");
    
    print 'Inserimento nel db avvenuto con successo...';
    
    }catch (PDOException $e){
        print 'Errore '. $e->getMessage();
    }


?>

Ho solo un dubbio. Come faccio ad inserire in un unica istruzione più valori nel db invece di scriverne 4?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Come faresti da normale query
PHP:
    $objstatement1=$objPDO->query("
        INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (1,'Nome1','Cognome1',1975);
        INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (2,'Nome2','Cognome2',1974);
        INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (3,'Nome3','Cognome3',1980);
        INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES (4,'Nome4','Cognome4',1985)
        ");
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Usa i prepared statement e inserisci una sola serie di istruzioni collegate tra loro in un blocco try/catch:
PHP:
<?php
try {
    $dbh = new PDO ('mysql:host=localhost;dbname=anagrafica','fabio','fabio');
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $dbh->prepare('INSERT INTO anagrafica (nome, cognome, nascita) VALUES (?, ?, ?)');

try {
    $dbh->execute(array('Nome1', 'Cognome1', 1975));
    $dbh->execute(array('Nome2', 'Cognome2', 1974));
    $dbh->execute(array('Nome3', 'Cognome3', 1980));
    $dbh->execute(array('Nome4', 'Cognome4', 1985));
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}
?>
Mentre se vuoi eseguire tutto in un'unica query:
PHP:
<?php
try {
    $dbh = new PDO ('mysql:host=localhost;dbname=anagrafica','fabio','fabio');
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $dbh->prepare('INSERT INTO anagrafica (nome, cognome, nascita) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?)');

try {
    $dbh->execute(array(
        'Nome1', 'Cognome1', 1975,
        'Nome2', 'Cognome2', 1974,
        'Nome3', 'Cognome3', 1980,
        'Nome4', 'Cognome4', 1985
    ));
} catch (PDOException $e) {
    die('Errore: ' . $e->getMessage());
}
?>
Ma non è consigliato, perché non è il modo corretto di usare i prepared statement e non aumenta nemmeno granché la velocità di esecuzione (se ho tempo faccio dei test più approfonditi).
 

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Grazie Alessandro, ma al momento cerco di connettermi usando "solo" query e exec. Ho scritto il seguente codice:

PHP:
<?php

//Connessione al db con PDO

try{
    $objPDO=new PDO ('mysql:host=localhost;dbname=prova','username','password');
    echo 'Connessione avvenuta con successo...';
    $objstatement=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES 
        (1,'Nome1','Cognome1',1975),
        (2,'Nome2','Cognome2',1980),
        (3,'Nome3','Cognome3',1985),
        (4,'Nome4','Cognome4',1986),
        (5,'Nome5','Cognome5',1987");
        
    print 'Inserimento nel db avvenuto con successo...';
    
    }catch (PDOException $e){
        print 'Errore '. $e->getMessage();
    }


?>

sembra tutto ok, ma non inserisce i valori nel db. Dove sbaglio?
 
Ultima modifica di un moderatore:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Grazie Alessandro, ma al momento cerco di connettermi usando "solo" query e exec. Ho scritto il seguente codice:

PHP:
<?php

//Connessione al db con PDO

try{
    $objPDO=new PDO ('mysql:host=localhost;dbname=prova','username','password');
    echo 'Connessione avvenuta con successo...';
    $objstatement=$objPDO->query("INSERT INTO anagrafica(id,nome,cognome,nascita)VALUES 
        (1,'Nome1','Cognome1',1975),
        (2,'Nome2','Cognome2',1980),
        (3,'Nome3','Cognome3',1985),
        (4,'Nome4','Cognome4',1986),
        (5,'Nome5','Cognome5',1987");
        
    print 'Inserimento nel db avvenuto con successo...';
    
    }catch (PDOException $e){
        print 'Errore '. $e->getMessage();
    }


?>

sembra tutto ok, ma non inserisce i valori nel db. Dove sbaglio?
Ti sei scordato di chiudere una tonda alla fine
Codice:
(5,'Nome5','Cognome5',1987)
 

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Invece il seguente codice non restituisce nessun valore dal db, quando lo eseguo esce una pagina bianca. Eppure non mi segna nessun errore nell'ide.

PHP:
<?php
try {
    
    $objPDO=newPDO('mysql:host=localhost; dbname=prova','user','password');
    $objPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $nascita=2000;
    $objStatement=$objPDO->prepare('SELET * FROM anagrafica WHERE nascita <= :nascita');
    $objStatement->bindParam(':nascita',$nascita);
    
    $objStatement->execute();
    while($arRow=$objStatement->fetch(PDO::FETCH_ASSOC)){
        print_r ($arRow);
            
        }
    }catch(PDOException $e)
    {
        print'Errore' .$e->getMessage;
    }

{
    
}

?>
 
Ultima modifica di un moderatore:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Invece il seguente codice non restituisce nessun valore dal db, quando lo eseguo esce una pagina bianca. Eppure non mi segna nessun errore nell'ide.

PHP:
<?php
try {
    
    $objPDO=newPDO('mysql:host=localhost; dbname=prova','user','password');
    $objPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $nascita=2000;
    $objStatement=$objPDO->prepare('SELET * FROM anagrafica WHERE nascita <= :nascita');
    $objStatement->bindParam(':nascita',$nascita);
    
    $objStatement->execute();
    while($arRow=$objStatement->fetch(PDO::FETCH_ASSOC)){
        print_r ($arRow);
            
        }
    }catch(PDOException $e)
    {
        print'Errore' .$e->getMessage;
    }

{
    
}

?>
Distanzia new PDO(), metti le tonde a $e->getMessage() non è un attributo ma un metodo inoltre nella query correggi SELET con SELECT
 
Discussioni simili
Autore Titolo Forum Risposte Data
M AIUTO ESERCIZIO JAVA Javascript 1
S Consiglio esercizio Javascript Javascript 2
G esercizio lista in c C/C++ 1
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
A [java] problema esercizio array Java 5
C [PHP] problema con un esercizio PHP 2
C esercizio in c progetto eulero C/C++ 0
ggt90 Esercizio javascript sugli array di oggetti Javascript 0
T [PHP] Calcolo anzianità soggetti [era: Help me :( Esercizio per me impossibile] PHP 9
M Esercizio Thread Java 0
M creazione pagina web per esercizio corso di web design Offerte e Richieste di Lavoro e/o Collaborazione 2
D Esercizio C e problema con SCL C/C++ 0
M Esercizio JavaScript-JSON Javascript 8
JackIlPazzo Esercizio PHP? PHP 8
K Esercizio ciclo for C/C++ 1
A Esercizio ArrayList Java 1
Z Esercizio HTTP su SSL Apache 1
L esercizio java Javascript 11
L esercizio javascript Javascript 0
C Esercizio: Inserire elenco numeri e controllare che siano di tupi numerico Javascript 2
V Esercizio javascrip Javascript 1
L Esercizio con le classi PHP 0
L Semplice esercizio funzioni JavaScript Javascript 5
A esercizio javascript e form! Javascript 13
F esercizio csma/cd Reti LAN e Wireless 0
H Teoria: Schema Logico/concettuale Di Un Esercizio. Aiutatemi Per Favore Database 1
M Aiuto per esercizio Programmazione 0
L Esercizio, realizzare un campionato PHP 1
minatore esercizio array PHP 4
B esercizio per esame.... AIUTO!!! Javascript 4
C Esercizio Php PHP 1
E esercizio..realizzare funzione... Classic ASP 5
L pdo (stampare un valore con ritorno a funzione) PHP 0
K [PHP] PDO.bindingParam PHP 2
M [PHP] Interrompere DROP TABLE con PDO PHP 0
M [PHP] Alternativa a datagrid con PDO PHP 6
M [PHP] Creare un menu a tendina con pdo PHP 18
M [PHP] Array di array - PDO PHP 2
3_g errore con mysql insert in PDO PHP 29
W [PHP] Creazione classe PDO PHP 4
F PHP, PDO e visualizzazioni errori e/o eccezioni PHP 3
3_g [PHP] mvc, pdo e classi... PHP 7
F Help-PDO copiare Database MySQL PHP 3
F php PDO mysql connessione(select_db) PHP 3
Fredyss redirect a altra pagina php dopo commit su postgresql con PDO PHP 1
K Non trovo l'errore! PDO MYSQL UPDATE PHP 2
C [PHP] PDO prepared statement - select query errore PHP 7
ANDREA20 [PHP] Errore $this->db_connection = new PDO PHP 0
CristianB72 Non riesco a connettermi al DB tramite PDO Database 10

Discussioni simili