Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    153

    Binding in PDO con array associativi

    Salve a tutti, chiedo scusa se ho sbagliato sezione, ma ero indeciso se mettere la mia domanda qui o in "database" essendo un po' border line.
    In ogni caso vi spiego il mio dubbio: mi sto addentrando nel magico mondo delle chiamate al database mysql tramite PDO presente in php versione 5.1 in poi.

    Ho scritto un array associativo di valori di questo tipo:

    codice:
    $nomi = array( 'nome1' => 'Topolino', 'nome2' => 'Pippo', 'nome3' => 'Paperino' );
    Ora, questo array mi serve per un inserimento in database di questo genere:

    codice:
    $query = "INSERT INTO personaggi (nome1, nome2, nome3) VALUES (:nome1, :nome2, :nome3)";
    $inserimento = $conn->prepare($query);
    $inserimento->execute($nomi);
    Fin qui tutto bene, mi fa il binding dei valori del mio array associativo e mi scrive la riga nel database.
    Tuttavia, prima di fare questa query, io ho bisogno di uno solo dei valori associativi per un'altra query. Allora ho pensato di scrivere in modo analogo:

    codice:
    $query = "DELETE FROM personaggi WHERE nome1 = :nome1";
    $del = $conn->prepare($query);
    $del->execute($nomi);
    Mi sembrava corretto e ho immaginato che se anche l'array associativo contenesse dei valori in più rispetto a quelli che mi servivano, avrebbe utilizzato solo quello indicato, tanto più che il nome è giusto. Invece nada, la query non ne voleva sapere di funzionare.
    Alla fine ho risolto in questa maniera:

    codice:
    $query = "DELETE FROM personaggi WHERE nome1 = :nome1";
    $del = $conn->prepare($query);
    $del->bindParam(':nome1', $nomi["nome1"]);
    $del->execute();
    Per carità, niente di grave, o usato bindParam() per associare specificatamente il valore dell'array di cui volevo fare il binding. Tuttavia mi piacerebbe capire cosa effettivamente non funzionava nella mia query precedente e se, davvero, quando inserisco un array associativo in execute() davvero devo per forza utilizzare tutti gli elementi dell'array, altrimenti non funziona.

    Spero che qualcuno riesca a darmi maggiori informazioni.

  2. #2
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    E' giusto, non è possibile di indicare valori che non vengano usati nella query. Vedi http://php.net/manual/en/pdostatement.execute.php per maggior informazione

    You cannot bind more values than specified; if more keys exist in input_parameters than in the SQL specified in the PDO:repare(), then the statement will fail and an error is emitted.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

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.