2016-01-25 77 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() ;