Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    bind_param, assegnare valori dinamicamente

    Ciao a tutti, sto cercando di crearmi un metodo che mi fa una multi update su una tabella passandogli un' array (ad esempio una $_POST["lista"]. Come è adesso funziona, solo che non ha l' aspetto di un metodo, nel senso che le variabili alle quali vanno assegnati i valori sono create in maniera statica e io vorrei farlo dinamicamente per quando in futuro lo riutilizzerò. Come si può fare?

    Codice PHP:
    public function f_update_by_post_array($array$pst$id_sow)       
    {  
        
    $ctrl 0;        
        for(
    $i=0$i<count($array); $i++)        
        {           
           
    // definizione della variabile per la sostituzione del placeholder
           //QUESTA PARTE VORREI CREARLA DINAMICAMENTE          
           
    $pst->bind_param('iii'$id_jobs_status$id_summary_of_work$id_jobs);                         
           
    $id_jobs_status 9;           
           
    $id_summary_of_work $id_sow;           
           
    $id_jobs $array[$i];                      

            
    //se l' update va a buonfine incremento di 1           
            
    if($pst->execute())           
             {              
                 
    $ctrl++;           
              }                        
         }

        
    //se ha raggiunto $array significa che tutte le update    
        //sono andare a buon fine   
        
    if($ctrl == count($array))        
        {           
            return 
    true;        
         }        
         else       
        {         
            return 
    false;        
        }     

    Ultima modifica di camionistaxcaso; 04-05-2015 a 15:44

  2. #2
    Prima ancora del problema non ho capito bene qual e' la necessita'.

  3. #3
    Facciamo un esempio diverso ma attinente:

    se passi un array di nome_campi => valore, tipo

    Codice PHP:

    $params 
    = array('username' => 'miaemail@provider.ext''nome' => 'Mio Nome'); 
    e vuoi eseguire una query

    Codice PHP:

    $sql 
    "select * from user where ";
    foreach(
    $params as $field => $value)
    {
     
    $sql.="$field = :$field";
    }

    $stmt $dbh->prepare($sql);

    foreach(
    $params as $field => $value)
    {
       
    $stmt->bindParam(':'.$field$value);
    }

    //eseguo lo staement.. 
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    Facciamo un esempio diverso ma attinente:

    se passi un array di nome_campi => valore, tipo

    Codice PHP:

    $params 
    = array('username' => 'miaemail@provider.ext''nome' => 'Mio Nome'); 
    e vuoi eseguire una query

    Codice PHP:

    $sql 
    "select * from user where ";
    foreach(
    $params as $field => $value)
    {
     
    $sql.="$field = :$field";
    }

    $stmt $dbh->prepare($sql);

    foreach(
    $params as $field => $value)
    {
       
    $stmt->bindParam(':'.$field$value);
    }

    //eseguo lo staement.. 
    Perfetto, solo aggiungerei:

    Codice PHP:
    ...
    $sql "select * from user where 1 ";
    ... 

    Così la query continua ad essere corretta anche nel caso in cui $params sia vuoto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Ahh ora ho capito cosa intendeva. Attenzione pero' alla sintassi santino, se e' una select mancano gli AND, se e' una update mancano le virgole.

  6. #6
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Ahh ora ho capito cosa intendeva. Attenzione pero' alla sintassi santino, se e' una select mancano gli AND, se e' una update mancano le virgole.
    si scusa, la fretta :P
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Ciao ragazzi, grazie e scusate l' assenza. Sto provando secondo i vosti consigli ma invano...sto andando un po' a caso nella speranza di capirci qualcosa:

    Codice PHP:
    public function f_update_by_post_array($array$pst$id_sow)       
    {  
       
    $ctrl 0;                 
       
    $arrayBind = array('id_job_status' => 9'id_SOW' => $id_sow);        
       
           for(
    $i=0$i<count($array); $i++)       
            {                    
                   foreach(
    $arrayBind as $key => $value)            
                   {                                    
                     
    $pst->bind_param('i'$arrayBind[$key], $array[$i]);            
                   }
              
                  
    //se l' update va a buonfine incremento di 1           
                  
    if($pst->execute())           
                   {  
                     
    $ctrl++;           
                   }                        
             }        

    //se ha raggiunto $array significa che tutte le update        
    //sono andare a buon fine        
    if($ctrl == count($array))        
           {           
                return 
    true;        
           }        
           else        
           {          
             return 
    false;       
           }

    Mi da questo errore:
    Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in C:\Program Files\xampp\htdocs\bs_site\include\db_class.php on line 66

    Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in C:\Program Files\xampp\htdocs\bs_site\include\db_class.php on line 66

  8. #8
    La programmazione e' un processo rigoroso, quindi andare a caso non porta a nessun risultato. Una buona cosa sarebbe leggere con attenzione la pagina di manuale relativa a una funzione, specialmente se questa da' errore (un errore peraltro piuttosto chiaro in questo caso).

    Cito da: http://php.net/manual/en/mysqli-stmt.bind-param.php

    Parameters

    types

    A string that contains one or more characters which specify the types for the corresponding bind variables:

    i corresponding variable has type integer
    d corresponding variable has type double
    s corresponding variable has type string
    b corresponding variable is a blob and will be sent in packets

    var1

    The number of variables and length of string types must match the parameters in the statement.

    Gli esempi riportati sotto sono anche molto chiari.

  9. #9
    Quindi il problema è la tipizzazione del dato? "i" è intero e i valori sono interi...no?
    $arrayBind = array('id_job_status' => 9, 'id_SOW' => $id_sow); sono tutti interi
    Ultima modifica di camionistaxcaso; 06-05-2015 a 22:23

  10. #10
    No... e' dato dal fatto che hai messo una "i" ma ci sono 2 valori.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.