PDO e QueryUpdate

di il
12 risposte

PDO e QueryUpdate

Salve a tutti, chiedo scusa se non mi sono ancora presentato nell'appostita sezione ma è abbastanza urgente, più tardi lo farò, comunque avevo un problema con l'aggiornamento di dati in un database mysql
Questo è il codice che utilizzo

        for($i=0;$i<count($select);$i++){ #scorro i record selezionati
        $num=$select[$i];
        $sql = $db->prepare('SELECT * FROM prodotto LIMIT ?, 1 ;'); #seleziono solo un record
        $sql->bindParam(1, $num);
        $sql->execute(); 
        $res = $sql->fetchAll();  
        $id1=$res[0][0];  #prendo il valore dell'id per l'identificazione del record
        $flagDel=0;
        for($x=0;$x<count($del);$i++){
           if($del[$x]==$num){
              $flagDel=1;
              $x=count($del);
           }
        }
        if ($flagDel==1) {
		   try{
              $sql = $db->prepare('DELETE FROM prodotto WHERE id_foto = ?;');
		      $sql->bindParam(1, $id1);
              $sql->execute(); 
		   }
		   catch(PDOException $e) {
              echo 'Attenzione: '.$e->getMessage();
           }
        }else{
		   try{
              $sql= $db->prepare('UPDATE prodotto(nome, descrizione, prezzo, qnt) VALUES(?,?,?,?) WHERE id_foto = ?;');
              $sql->bindParam(1, $nome1);
              $sql->bindParam(2, $desc1);
	           $sql->bindParam(3, $prezzo1);
	           $sql->bindParam(4, $qnt1);
	           $sql->bindParam(5, $id1);
	           $sql->execute();
		   }
		   catch(PDOException $e) {
              echo 'Attenzione: '.$e->getMessage();
           }
		   
        }
     }
Premetto che il codice prima che usassi le pdo funzionava (apparte la cancellazione), quindi deduco che le sto utilizzando in modo errato, qualcuno saprebbe illuminarmi?

12 Risposte

  • Re: PDO e QueryUpdate

    Ciao, ti da qualche errore in particolare o semplicemente non viene eseguito ciò che desideri?
  • Re: PDO e QueryUpdate

    Nessun errore, non succede nulla proprio
  • Re: PDO e QueryUpdate

    Ora che ci faccio caso la UPDATE ha una sintassi diversa. Dovrebbe essere
    UPDATE <table_name> SET <column1>=<value1>, <column2>=<value2> WHERE <condition>
    Usando questa sintassi a me funziona correttamente.
  • Re: PDO e QueryUpdate

    Ora provo, però anche la sintassi che ho usato dovrebbe essere giusta.. Adesso verifico
    ___

    Niente, ho provato in diversi modi ma nulla, tu intendevi così giusto?
    
    $sql= $db->prepare('UPDATE prodotto SET nome=:nome, descrizione=:desc, prezzo=:prezzo, qnt=:qnt) WHERE id_foto = :id;');
    $sql->bindParam(":nome", $nome1);
    $sql->bindParam(":desc", $desc1);
    $sql->bindParam(":prezzo", $prezzo1);
    $sql->bindParam(":qnt", $qnt1);
    $sql->bindParam(":id", $id1);
    $sql->execute();
    
  • Re: PDO e QueryUpdate

    Si, così o coi punti interrogativi è indifferente e funziona ugualmente! Occhio però che hai messo una parentesi in più prima della WHERE che causa un errore di sintassi!


    Sent from my iPhone using Tapatalk
  • Re: PDO e QueryUpdate

    Si perdonami, ma l'ho copiato male qui, nel codice che stavo provando lo avevo corretto ma nulla comunque.. Non funziona ancora
  • Re: PDO e QueryUpdate

    Dunque di default gli errori sono disabilitati nel PDO, quindi prova ad abilitarli quando crei la connessione al DB:
    
    try {
        $db = new PDO( 'mysql:host=localhost;dbname=mydb',
            'admin',
            '1234',
            array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
        );
    } catch (PDOException $e) {
        die('Error: '.$e->getMessage());
    }
    
    In questo modo se ci sono errori durante l'esecuzione del codice mysql ti vengono lanciate delle eccezioni che indicano la causa del fallimento
  • Re: PDO e QueryUpdate

    Gli errori sono abilitati ho già verificato con dati errati per accedere al database, però per quanto riguarda l'update nessun segno di errore.. semplicemente non fa nulla, non so proprio dove posso aver sbagliato
  • Re: PDO e QueryUpdate

    Forse per i parametri che non sono stringhe devi specificare il tipo di dato: ad esempio se "qnt" è un intero:
    $sql->bindParam(":qnt", $qnt1, PDO::PARAM_INT);
    Per i numeri decimali a quanto pare è sufficiente trattarli come stringhe (PDO::PARAM_STR, che è quello di default se non viene specificato alcun tipo).
  • Re: PDO e QueryUpdate

    Nemmeno :S
  • Re: PDO e QueryUpdate

    E' molto strano.
    Ti incollo il codice di prova che ho usato io, nel caso ti potesse essere utile..

    Tabella MySQL:
    
    +--------+---------+------+-----+---------+----------------+
    | Field  | Type    | Null | Key | Default | Extra          |
    +--------+---------+------+-----+---------+----------------+
    | id     | int(11) | NO   | PRI | NULL    | auto_increment |
    | testo  | text    | YES  |     | NULL    |                |
    | valore | int(11) | NO   |     | NULL    |                |
    +--------+---------+------+-----+---------+----------------+
    Codice PHP:
    
    <?php
    try {
    	$db = new PDO('mysql:host=localhost;dbname=tmp','root','admin');
    	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	$stmt = $db->prepare('UPDATE prova SET testo=:testo, valore=:valore WHERE id=:id');
    	
    	$testo = 'testo di prova2';
    	$valore = 14;
    	$id = 2;
    	
    	$stmt->bindParam(':testo', $testo);
    	$stmt->bindParam(':valore',$valore);
    	$stmt->bindParam(':id',$id);
    	
    	$result = $stmt->execute();
    	if ($result)
    		echo 'OK';
    	else
    		echo 'Errore';
    } catch (PDOException $e){
    	die('Error: '.$e->getMessage());
    }
    ?>
  • Re: PDO e QueryUpdate

    Penso di aver capito dov'è l'errore, un errore stupido aggiungo, adesso verifico e rettifico..
Devi accedere o registrarti per scrivere nel forum
12 risposte