2016-06-29 6 views
1

Ich habe eine Frage zu meinem CRUD-Plugin. Ich arbeite an der Aktualisierung Abschnitt und wenn ich die Abfrage aktualisieren, erhalten alle Spalten die ': ID' als Wert und nicht ihre eigenen.PDO-Abfrage doppelte Bindung statt ihrer eigenen

Unter meinem debugDumpParams();

string(7) "column1" 
string(4) "help" 
string(7) "column2" 
string(4) "help" 
string(2) "id" 
string(1) "4" 

SQL: [69] UPDATE test SET column1 = :column1, column2 = :column2 WHERE id = :id 

Params: 3 
Key: Name: [8] :column1 
paramno=-1 
name=[8] ":column1" 
is_param=1 
param_type=2 
Key: Name: [8] :column2 
paramno=-1 
name=[8] ":column2" 
is_param=1 
param_type=2 
Key: Name: [3] :id 
paramno=-1 

Al andere Abschnitte meines CRUD arbeiten und der Einsatz arbeitet fast auf die gleiche Weise, so dass ich keine nicht, was ich worng tun, vielleicht jemand von außerhalb des eror sehen, dass ich nicht sehen kann .

Unter meinen Code:

}elseif($type == 'update') { 

    $columns = array_keys($column); 
    $col_set = implode(",",$columns); 

    $query_array = array(); 

    foreach ($column as $key => $value) { 

     if($key == 'id'){ 
      $query_array_id = $key.' = :'.$key; 
     }else{ 
      $query_array[] = $key.' = :'.$key; 
     } 

    } 
    $query = ''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.''; 

    $dbh_query = $dbh->prepare($query); 

    foreach ($column as $key => $value) { 

     $dbh_query->bindParam(':'.$key, $key); 
     var_dump($key); 
     $key = trim($value); 
     var_dump($key); 

    } 

    $dbh_query->execute(); 
    $dbh_query->debugDumpParams(); 

    echo '<br/>'; 

    return $dbh_query; 
} 

unter dem, was ich in der Datenbank erhalten:

'column1' => '4', 
'column2' => '4', 
'id' => '4' 

Das ist falsch, weil meine Funktionsaufruf:

$postFile->processing('update', 'test', array(
               'column1' => 'help', 
               'column2' => 'help', 
               'id' => '4' 
              )); 

Vielen Dank!

UPDATE!

Ändern Sie ein wenig von meinem Code und es funktioniert, vielen Dank!

}elseif($type == 'update') { 

    $columns = array_keys($column); 
    $col_set = implode(",",$columns); 

    $query_array = array(); 

    foreach ($column as $key => $value) { 

     if($key == 'id'){ 
      $query_array_id = $key.' = :'.$key; 
     }else{ 
      $query_array[] = $key.' = :'.$key; 
     } 

    } 

    $query = ''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.''; 

    $dbh_query = $dbh->prepare($query); 

    $dbh_query->execute($column); 


    return $dbh_query; 
+0

$ dbh_query-> bindParam (stark gefährdet ist ':' $ key, $ key.); -> $ dbh_query-> bindParam (':'. $ key, $ value); – Pete

+0

Pieter, dank für jede reactie, alle de $ key moet het zelfde zijn omdat in trimmen de wert wordt gedefiniëerd –

Antwort

2

senden Sie Ihre Daten direkt in Ausführung. ohne bindParam

mit
$dbh_query = $dbh->prepare($query); 
$dbh_query->execute($column); 

aber Sie müssen verstehen, dass diese alle Spaghetti

''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.'' 

zu SQL-Injection-

+0

Ich habe es geändert, und überprüfen Sie es auf SQL-Injektion. –

Verwandte Themen