2013-12-03 6 views
0

У меня есть эта функция, с которой я передаю имя таблицы и данные.PDO не вставлять правильные данные

public function quickInsert($table, $data) { 
    $keys = array_keys($data); 

    $keysStr = '`'.implode('`,`', $keys).'`'; 
    $valStr = ':'.implode(',:', $keys); 
    $Sql = "INSERT INTO `$table` ($keysStr) VALUES ($valStr)"; 
    dump($Sql); 
    $st = $this->connection->prepare($Sql); 
    foreach ($data as $k => $v) { 
     dump(':'.$k.' - '.$v); 
     $st->bindParam(':'.$k, $v); 
    } 
    //dump($st->execute()); 
} 

Выход из отвалов является

string(114) "INSERT INTO `users` (`email`,`password`,`first_name`,`last_name`) VALUES (:email,:password,:first_name,:last_name)" 

string(21) ":email - [email protected]" 

string(140) ":password - myHashedPasswordString" 

string(17) ":first_name - Tom" 

string(17) ":last_name - Hart" 

Однако, когда я выполнить запрос, данные во всех полях фамилия (в данном случае «Харт»).

Что я получил неправильно?

ответ

4

$v перезаписан на каждой итерации цикла, когда он завершен, и $st->execute() запускает его, содержит только последнее значение. Попробуйте $st->bindValue() вместо $st->bindParam().

+0

Совершенно, th ank вы очень много, я не знал, что bindParam работал так :). –

+0

Вы должны принять ответ – max

+0

Я не могу на 7 минут, я скоро как могу –

Смежные вопросы