php - PDO binds n times same value with foreach -


i have function in php, should bind in mysql in statement many variables, in array. problem variable , key changing function bind last value n times.

i don't have idea problem...

here class method:

public function getotlistbyotnumbers($conditions){         $data_array = $conditions[search_ot];     # find last key (remove coma)         $quantity = count($data_array);         $marks = '';     # bind name string && rewriting value integer         foreach ($data_array $key => $value){             $i = $key+1;             if ($i == $quantity){                 $marks .= ':key'.$i;             }             else {                 $marks .= ':key'.$i.', ';             }         }     # query         $sql="         select             c_int_id,             c_ot,             c_tickets_amount,             c_basket_value,             c_person,             c_company,             c_city,             c_package_number,             c_delivery_method,             c_ot_date,             c_email,             c_phone,             c_comment,             c_send         ws_orders         c_ot in (".$marks.")         order c_int_id desc         limit :first, :last ";         $stmt = $this->pdo->prepare($sql);      # bind n values     // here problem         var_dump($data_array); // var dump 1          foreach ($data_array $key => $param){             $key_number = $key +1;             $key_name = 'key'.$key_number;             $stmt->bindparam($key_name, $param, pdo::param_int);             var_dump($key_name); // var dump 2             var_dump($param); // var dump 3         }      # bind limit values         $stmt->bindparam('first', $conditions[ot_search_first_row], pdo::param_int);         $stmt->bindparam('last', $conditions[ot_search_row_limit], pdo::param_int);      # if executed return result         if ($stmt->execute() != false) {             $stmt_result = $stmt->fetchall();             $stmt->closecursor();             var_dump($stmt_result); // var dump 4      # if not executed print debug , return false         } else {             var_dump($stmt->errorinfo());             $this->debugquery($stmt);             $stmt_result = false;         }          return $stmt_result;     } 

here var dupms:

var dump 1

array (size=2)  0 => string '2761531'  1 => string '2760650' 

var dump 2 & 3

string 'key1' (length=4)  string '2761531'  string 'key2' (length=4)  string '2760650' 

sql query execution

        select             c_int_id,             c_ot,             c_tickets_amount,             c_basket_value,             c_person,             c_company,             c_city,             c_package_number,             c_delivery_method,             c_ot_date,             c_email,             c_phone,             c_comment,             c_send         ws_orders         c_ot in ('2760650', '2760650')         order c_int_id desc         limit 0, 30 

so doing wrong?

edit




so did ;) problem foreach

instead of:

     foreach ($data_array $key => $param){         $key_number = $key +1;         $key_name = 'key'.$key_number;         $stmt->bindparam($key_name, $param, pdo::param_int);         var_dump($key_name); // var dump 2         var_dump($param); // var dump 3     } 

i give:

        ($key_number = 0; $key_number < $quantity + 1; $key_number++) {             $key_name = 'key'.$key_number;             $stmt->bindparam($key_name, $data_array[$key_number], pdo::param_int);         } 

and works, still don't know problem earlier foreach...

there difference between pdo::bindparam() , pdo::bindvalue(). pdo::bindparam binds reference, not value. when foreach process ends, $param reference last array value. in time of execute call binded references evaluated same value.

official pdo::bindparam documentation says:

unlike pdostatement::bindvalue(), variable bound reference , evaluated @ time pdostatement::execute() called.

if want bind values in foreach use pdo::bindvalue.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -