Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Bind paramaters per multi insert

    Ciao a tutti, sto cercando di creare una classe che mi gestisca una o più insert con pdo e i prepared statement di mysql, solo che sto avendo dei problemi.
    L' errore che mi restituisce è
    PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
    anche se a quanto pare il numero dei parametri è corretto, se faccio un print_r dell' array contenente i dati da inserire e un print della stringa sql visualizzo questo:
    INSERT INTO t_estimates (subject, date_estimates, estimate_cost, validity, with_iva, note, id_estimate_status, id_staff, id_document, id_document_year) VALUES (? , ? , ? , ? , ? , ? , ? , ? , ? , ?)
    Array ( [subject] => Oggetto del preventivo [date_estimates] => 2019-10-28 [estimate_cost] => 12000 [validity] => 30 [with_iva] => 1 [note] => Note [id_estimate_status] => 12 [id_staff] => 78 [id_document] => 151 [id_document_year] => 2019 )

    INSERT INTO t_jobs (id_works, start_time, end_time, annulled, subject, note) VALUES (? , ? , ? , ? , ? , ?)
    Array ( [id_works] => 2422 [start_time] => [end_time] => [annulled] => [subject] => [note] => )

    INSERT INTO t_jobs_amount_hours (id_jobs, id_staff, fp_number, start_time, end_time, note, id_status) VALUES (? , ? , ? , ? , ? , ? , ?)

    Array ( [id_jobs] => 0 [id_staff] => [fp_number] => [start_time] => [end_time] => [note] => [id_status] => 7 )

    INSERT INTO t_jobs_about_doc (id_jobs_session, id_estimates) VALUES (? , ?)

    Array ( [id_jobs_session] => 0 [id_estimates] => 0 )

    Grazie mille ecco il codice:
    Codice PHP:
    class INSERT extends DB{
    public static
    $Bind;
    public static
    $Data;
    public static
    $Table;
    public static
    $Columns;
    public static
    $SpValues;
    public static
    $LastInsertId;
    public function
    __construct($p){
    parent::__construct($p["conn"]);
    self::$Bind = $p["bind"];
    self::$Data = $p["data"];
    self::$Table = $p["table"];
    self::$Columns = $p["columns"];
    self::$SpValues = $p["sp_values"];
    self::Insert();
    }
    private function
    Insert(){
    $Sql = "INSERT INTO " . self::$Table . " (" . self::$Columns . ") VALUES (" . self::$SpValues . ")";
    if(
    self::$Bind === true){
    $stmt = $this->PdoConn->prepare($Sql);
    $stmt->execute(self::$Data);
    }
    else{
    $this->PdoConn->query($Sql);
    }
    self::$LastInsertId = $this->PdoConn->lastInsertId();
    }
    }


  2. #2
    Scusate ma se faccio visualizza anteprima per indentare sparisce il messaggio e non lo pubblica e se cerco di modificare lo stesso

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,514
    Non usando i named paramenter, l'array che passi alla execute non deve essere associativo
    ES:
    Codice PHP:
    $s $pdo->prepare("INSERT ... VALUES (?,?)");
    $->
    execute([1,2]); 
    Se usi i named invece devi usare un array associativo con le chiavi che corrispondo

    Codice PHP:
    $s $pdo->prepare("INSERT ... VALUES (:par1, :par2)");
    $->
    execute([':par1' => 1,':par2'=> 2]); 

  4. #4
    Grazie mille me ne sono accorto, sono proprio deficiente...grazie

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