2016-01-25 75 views
0
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只有一个值插入

+2

查询还需要在循环 –

+0

@RakeshSharma你的意思是在foreach循环 – gaurav

+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() ;