【问题标题】:PDO statements foreach inside a loop循环内的 PDO 语句 foreach
【发布时间】:2014-02-02 06:18:34
【问题描述】:

我正在使用准备语句将一组语句插入到我的数据库中。但是我面临着正确插入它的问题。我的代码看起来像这样 我有 $requests 数组

(
    [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 循环。我可以看到插入到我的数据库中的两行。但是外部 for 循环不起作用。我希望在我的数据库中插入 4 行。请帮我解决这个问题

【问题讨论】:

  • 你的数据库架构是什么样的?
  • 也许你在某处有一个独特的约束来阻止多次插入?如果您启用异常错误模式,脚本将会失败。
  • @jack,非常感谢您的快速回复。你的猜测是对的。我在那里有一个独特的限制……再一次。非常感谢您的帮助和支持

标签: php arrays pdo foreach sql-insert


【解决方案1】:

您可能在某处有一个唯一索引。

$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());
    }
}

您应该尝试捕获任何异常以查看发生了什么。我编辑了您的代码以添加一些格式,以便我可以阅读它。试一试,看看有什么问题(如果有的话)

【讨论】:

  • 这只有在你先 $this-&gt;core-&gt;dbh-&gt;setAttribute(PDO::ATTR_ERROMODE, PDO::ERRMODE_EXCEPTION) 时才有效。
  • 你的猜测是正确的,我在我的一个领域有一个独特的约束。感谢您的快速回复.. 非常感谢
猜你喜欢
  • 2013-11-01
  • 2020-05-15
  • 2011-05-09
  • 2016-09-02
  • 2016-07-25
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多