2014-01-14 39 views
0

正在使用prepare语句向我的数据库插入一个语句数组。但是我面临的问题是正确插入它。我的代码看起来像这样 我有$请求阵列在一个循环内部的PDO语句foreach

(
    [0] => 456908497765326_100004069844270 
    [1] => 456908497765326_100000058716604 
) 

$stmt = $this->core->dbh->prepare("INSERT INTO fb_requests(user_id,fb_user_id,request_id,game_selected,accept_status) VALUES(:user_id,:fb_user_id,:request_id,:game_selected,:outstanding)"); 
for($i=0;$i<2;$i++){ 
    echo "counter value".$i; echo"</br>"; 
    foreach($requests as $requestid) { 
     echo "request value".$requestid; echo"</br>"; 
     $stmt->execute(array('user_id'=>$user_id,':fb_user_id' => $uid, ':request_id' => $requestid,':game_selected' => $i, ':outstanding' => $outstanding)); 
    } 
} 

的插入工作只有内部foreach循环。我可以看到两行插入到我的数据库中。但外循环不起作用。我期望4行插入我的数据库。请帮我解决这个问题

+0

什么是你的数据库模式? – Daedalus

+4

也许你有一个独特的约束,可以防止多次插入?如果启用异常错误模式,则脚本将会失败,如果是这种情况。 –

+0

@jack,非常感谢您的快速回复。你的猜测是对的。我有一个独特的限制..再一次。非常感谢您的帮助和支持 – Dibish

回答

0

你可能有一个独特的索引。

$stmt = $this->core->dbh->prepare(" 
    INSERT INTO fb_requests (user_id, fb_user_id, request_id, game_selected, accept_status) 
    VALUES (:user_id, :fb_user_id, :request_id, :game_selected, :outstanding) 
"); 

for($i = 0; $i < 2; $i++) { 
    echo "counter value $i<br>"; 
    foreach($requests as $requestid) { 
     echo "request value $requestid<br>"; 
     try { 
      $stmt->execute(array(
       'user_id' => $user_id, 
       'fb_user_id' => $uid, 
       'request_id' => $requestid, 
       'game_selected' => $i, 
       'outstanding' => $outstanding 
      )); 
     } catch (PDOException $e) 
     { 
      var_dump($e->getMessage()); 
     } 

     var_dump($stmt->errorInfo()); 
    } 
} 

您应该尝试捕捉任何异常情况,看看发生了什么。我编辑了你的代码来添加一些格式,所以我可以阅读它。给出一个看看,如果有的话,问题是goi

+1

这只有在您首先执行'$ this-> core-> dbh-> setAttribute(PDO :: ATTR_ERROMODE,PDO :: ERRMODE_EXCEPTION)时才有效。 –

+0

你的猜测是正确的我在我的一个领域有一个独特的限制。感谢您的快速响应..非常感谢 – Dibish