Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14

    PDO: Errore nella causa apici e virgolette

    Utilizzo la classe PDO in una semplicissima funzione prototipo per eseguire le query.

    Funziona tutto correttamente ma per qualche motivo sia utilizzando il bind che l'execute mi da errore in presenza di valori da inserire in vui vi siano ' o ".

    codice:
    function doquery($fquery,$farray=null) {  try {
        if (!isset($pdo)) {
          $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=utf8",DB_USER,DB_PASS);
          $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        }
        
        $fstmt = $pdo->prepare($fquery);
        if ($farray) {
    //      foreach ($farray as $key => &$val) { // tolto per provare l'execute diretto con array
    //        $fstmt -> bindParam($key, $val);
    //        }
          $is_ok = $fstmt->execute($farray);
        } else {
          $is_ok = $fstmt -> execute();
        }
    
    
        if ($is_ok) {
          if (strstr($fquery,"SELECT")) {
            $value = $fstmt -> fetchAll(PDO::FETCH_ASSOC);
          } else {
            $value = $fstmt -> rowCount();
          }
        } else {
          $value = NULL;
        }
        $fstmt = NULL;
           
        return $value;
      } catch (PDOException $e) {
        echo $fquery."\n";
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
      }
    }
    Dal manuale PH si evice che gli escape e i controlli anti SQLInjection vengono svolti direttamente dalla classe PDO ... cosi' non par essere.
    Ho provato anche con la quote del PDStatment ma non funziona ...

    Possibili altre soluzioni?

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    fai un esempio e specifica gli errori

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14
    codice:
    INSERT INTO mytable ('col1', 'col2', 'textarea', 'data') VALUES ('A,'B','sono un apice '','2014-09-04 11:42:32');Error!: SQLSTATE[42000]: Syntax error or access violation: 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2014-09-04 11:42:32')' at line 1
    Ultima modifica di drstefa; 04-09-2014 a 12:19

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    cosa passi a doquery() ?

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    --sbagliato---
    Ultima modifica di luca200; 04-09-2014 a 15:51

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se scrivi la query in quel modo è chiaro che non ti fa nessun escape. Devi usare i parametri

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14
    Quote Originariamente inviata da boots Visualizza il messaggio
    cosa passi a doquery() ?
    Quote Originariamente inviata da luca200 Visualizza il messaggio
    Se scrivi la query in quel modo è chiaro che non ti fa nessun escape. Devi usare i parametri
    La funzione viene passata come stringa query e parametri in array quindi, chiamata esempio:

    $query = "INSERT INTO mytable ('col1', 'col2', 'textarea', 'data') VALUES (:a,:b,:c,:d)";
    $result = doquery($query,array(":a"=>"A",":b"=>"B";":c"=>"so no un' apice";":c"=>"2014-09-04 11:42:32"));

  8. #8
    Devi utilizzare bindValue() o bindParam()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Controlla gli apici di
    INSERT INTO mytable ('col1', 'col2', 'textarea', 'data')
    Gli apici non ci vanno, oppure devi usare i back-quotes

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    14
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Devi utilizzare bindValue() o bindParam()
    Se vedi nella funzione li ho commentati perche' non funzionava comunque.

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.