数据库中的所有列中只插入一个值

时间:2016-01-25 07:13:40

标签: php mysql

require_once 'core.php' ;

try {
 $db = new PDO("mysql:host=$host;dbname=$dbname",$user,$password) ;
 $db -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

 $a = array(
    'name' => 'rocky',
    'password' => '12345' ,
    'age' => '22'
    ); 
 $c = implode(",",array_keys($a) ) ;
 $f = ":".implode(" , :",array_keys($a));

  $db->beginTransaction();
  $query = $db->prepare("INSERT INTO try ($c) VALUES ($f)");
  foreach ($a as $key => $value) {
        $query->bindParam(":".$key,$value,PDO::PARAM_STR) ;
  } 
  $query->execute() ;
  $db->commit() ;


} catch(PDOException $e){
die($e->getMessage()) ;
} 

在数据库中只有一个年龄值插入名称,密码,年龄列相同的值如22,22,22

1 个答案:

答案 0 :(得分:1)

问题出在bindParam函数:

$db->beginTransaction();
$query = $db->prepare("INSERT INTO try ($c) VALUES ($f)");
foreach ($a as $key => $value) {
    $query->bindParam(":".$key,$value,PDO::PARAM_STR) ;
} 
$query->execute() ;
$db->commit() ;

阅读bindParam手册:

  

PDOStatement::bindValue()不同,变量被绑定为引用,并且仅在调用PDOStatement::execute()时进行评估。

这意味着当您执行execute时 - 所有绑定变量都设置为 最后$value值,它是数组的最后一个值,为22

因此,请使用bindValue

$db->beginTransaction();
$query = $db->prepare("INSERT INTO try ($c) VALUES ($f)");
foreach ($a as $key => $value) {
    $query->bindValue(":".$key, $value, PDO::PARAM_STR) ;
} 
$query->execute() ;
$db->commit() ;