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
答案 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() ;