Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    Vedere una query parametrica

    Effettuo inserimenti (e modifiche) tramite query parametriche in questo modo:
    Codice PHP:
    $qwt "INSERT INTO `agenzia` (`nome`) VALUES (?)";
    $result $connessione->prepare($qwt);
    $result->bind_param('s'$nome);    
    $result->execute(); 
    Vorrei visualizzare le query per poter verificare al meglio i dati che inserisco o modifico (successivamente le vorrei salvare in un file di log).
    Se però faccio un:
    Codice PHP:
    echo $qwt
    non mi viene visualizzato l valore di $nome

    Vorrei avere una query completa che in caso di dubbi con un bel copia e incolla la posso far eseguire a phpmyadmin per verificarne il funzionamento.
    tipo: INSERT INTO `agenzia` (`nome`) VALUES ('mionome')

    Grazie
    Sonia

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    537
    è una funzione che ho trovato ( da qualche parte ) in internet, l'ho adattata per facilità d'uso,
    ovvero considera che i parametri sono in una array
    e molto semplicemente forniti con
    Codice PHP:
    $result->execute($params); 
    quindi allo stesso modo vengono passati alla funzione che stai cercando
    Codice PHP:
    function SqlDebug($raw_sql$params=array())
    {
      
    $keys = array();
      
    $values $params;  foreach ($params as $key => $value)
      {
        
    // check if named parameters (':param') or anonymous parameters ('?') are used
        
    if (is_string($key)) { $keys[] = '/:'.$key.'/'; }
        else                 { 
    $keys[] = '/[?]/'; }
        
    // bring parameter into human-readable format
        
    if (is_string($value))    { $values[$key] = "'" $value "'"; }
        elseif (
    is_array($value)) { $values[$key] = implode(','$value); }
        elseif (
    is_null($value))  { $values[$key] = 'NULL'; }
      }
      
    $raw_sql preg_replace($keys$values$raw_sql1$count);
      return 
    $raw_sql;


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    537
    ps, foreach è andato di seguito alla riga e non si fa modificare ....

  4. #4
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie!
    Adesso mi sto studiando la lettura e scrittura dei files, dopo proverò ad implementare il tuo codice per creare il log con le query come serve a me.

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    L'ho adattato in questo modo:
    Codice PHP:
    $qwt "INSERT INTO `agenzia` (`nome`) VALUES (?)";
    $result $connessione->prepare($qwt);
    $par $nome;
    $result->bind_param('s'$par);    
    $result->execute();  

      
    $keys = array();
      
    $values $par;  
      foreach (
    $par as $key => $value)
      {
        
    // check if named parameters (':param') or anonymous parameters ('?') are used
        
    if (is_string($key)) { $keys[] = '/:'.$key.'/'; }
        else                 { 
    $keys[] = '/[?]/'; }
        
    // bring parameter into human-readable format
        
    if (is_string($value))    { $values[$key] = "'" $value "'"; }
        elseif (
    is_array($value)) { $values[$key] = implode(','$value); }
        elseif (
    is_null($value))  { $values[$key] = 'NULL'; }
      }
      
    $raw_sql preg_replace($keys$values$raw_sql1$count);
      echo 
    "contenuto: " .$raw_sql
    Ma il contenuto mi risulta sempre vuoto!
    Ovviamente $par è uguale a $nome, ma poi ho intenzione di mettere tutti i parametri li e fonderli in un unica variabile per cercarli.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    537
    conviene già usare l'array, semplificando il tutto
    ps, nel caso di più parametri
    $par = array($nome, $par2, $par3,....)

    Codice PHP:
    <?php
    $nome
    ="dario lampa";

    $qwt "INSERT INTO `agenzia` (`nome`) VALUES (?)";
    $par = array($nome);

    $result $connessione->prepare($qwt);
    $result->execute($par);  

    echo 
    "contenuto: " .SqlDebug($qwt$par);  


    function 
    SqlDebug($raw_sql$params=array())
    {
      
    $keys = array();
      
    $values $params;  
      foreach (
    $params as $key => $value)
      {
        
    // check if named parameters (':param') or anonymous parameters ('?') are used
        
    if (is_string($key)) { $keys[] = '/:'.$key.'/'; }
        else                 { 
    $keys[] = '/[?]/'; }
        
    // bring parameter into human-readable format
        
    if (is_string($value))    { $values[$key] = "'" $value "'"; }
        elseif (
    is_array($value)) { $values[$key] = implode(','$value); }
        elseif (
    is_null($value))  { $values[$key] = 'NULL'; }
      }
      
    $raw_sql preg_replace($keys$values$raw_sql1$count);
      return 
    $raw_sql;

    ?>
    RISULTATO
    contenuto: INSERT INTO `agenzia` (`nome`) VALUES ('dario lampa')

  7. #7
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie!
    L'echo mi funziona correttamente
    Due cose:
    1- sull'execute ottengo l'errore Warning: mysqli_stmt::execute() expects exactly 0 parameters, 1 given
    2- Prima definivo le variabili s (string) o i(int) qui dove lo vado ad impostare? Non devo fare il bind_param?

    ---
    Ho trovato in rete metodi dove però dovrei riscrivere la query mentre in questo modo con un bel copia e incolla dei parametri avrei il lavoro "salvo".

  8. #8
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Ho risolto così e funziona, ti sembra corretto?
    Codice PHP:
    $qwt "INSERT INTO `agenzia` (`nome`,`email`) VALUES (?,?)";
    $par = array($nome$mail);

    $result $connessione->prepare($qwt);
    $result->bind_param('ss'$par[0], $par[1]); 
    $result->execute();

    echo 
    "contenuto: " .SqlDebug($qwt$par); 

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    537
    1- sull'execute ottengo l'errore Warning: mysqli_stmt::execute() expects exactly 0 parameters, 1 given
    questa è una differenza tra mysql e mssql, utilizzo il secondo, che mi consente di passare i valori nella execute
    2- Prima definivo le variabili s (string) o i(int) qui dove lo vado ad impostare? Non devo fare il bind_param?
    se funziona la costruzione che hai usato, a mio parere è meglio, una sola istruzione, altrimenti
    puoi usare bind in sequenza,
    Codice PHP:
    $result->bind_param('s'$par[0]);
    $result->bind_param('s'$par[1]); 
    ma devi fare qualche prova, non ho mysql
    poi dipende da come imposti il tuo software, io ho creato una classe che contiene tutti i metodi relativi alla gestione del db, in questo modo diventa semplice fare le operazioni
    Ultima modifica di marino51; 08-06-2017 a 11:28

  10. #10
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Si quello che ho usato funziona.
    Il bind in sequenza preferivo evitarlo dopo dovrò comunque ritestare tutto le query, ma nel modo come ho fatto io dovendo modificare meno cose è più difficile che vada a fare errori.
    Grazie

Tag per questa discussione

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.