【问题标题】:Update database, in foreach loop?在 foreach 循环中更新数据库?
【发布时间】:2013-08-22 02:46:14
【问题描述】:

在我正在创建的纸牌游戏中,我需要在 foreach 循环中更新数据库,因为他们 checkbox 每 3 张牌就会更新他们创建的手牌的数据库。

我遇到的问题是,即使它看起来是正确的,它也不起作用。

if (isset($_POST['hand']) == true)
{
    if (sizeof($_POST['checkbox']) == 3)
    {
        foreach($_POST['checkbox'] as $checkbox)
        {
            $query = "UPDATE games SET ? = ? WHERE comp = 0";
            $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
            $stmt = $db->prepare($query);
            $stmt->bindValue(1, "ss$ver");
            $stmt->bindValue(2, $checkbox);
            $stmt->execute();
            $ver = $ver + 1;
            echo $checkbox.'<br/>';
        }
    }
    else
    {
        echo 'You must only select 3 cards.';
    }
}

$ver 是为了让卡片可以在 foreach 循环中完成。每次循环循环时,"ss$ver" / 'ss'.$ver 都会递增,以便它遵循数据库中的下一个 field title / column。但是我得到的 mySQL 错误是这样的。

警告:PDOStatement::execute(): SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 126 行的 E:\wamp\www\index.php 的第 1 行的 ''ss1' = '13' WHERE comp = 0' 附近使用正确的语法

警告:PDOStatement::execute(): SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 126 行的 E:\wamp\www\index.php 的第 1 行的 ''ss2' = '15' WHERE comp = 0' 附近使用的正确语法`

等等。

关于如何绕过复选框的 foreach 循环或在循环中实际更新的任何想法?

感谢任何帮助!

对于表格

echo '<form input="index.php" method="post">';
foreach($fetch as $key => $value)
{
    $check = '<input class="check" type="checkbox" name="checkbox[]" value="'.$value.'">';
    echo $cards[$value].$check;
}

【问题讨论】:

  • 问题是你不能对列/表名等使用变量绑定,因为没有“数据”,因此不支持绑定。恭喜你发现。

标签: php mysql


【解决方案1】:
if (isset($_POST['hand']) == true)
{
    if (sizeof($_POST['checkbox']) == 3)
    {
        foreach($_POST['checkbox'] as $checkbox)
        {
            $query = "UPDATE games SET ss$ver = ? WHERE comp = 0";
            $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
            $stmt = $db->prepare($query);
            // $stmt->bindValue(1, 'ss'.$ver);
            $stmt->bindValue(1, $checkbox);
            $stmt->execute();
            $ver = $ver + 1;
            echo $checkbox.'<br/>';
        }
    }
    else
    {
        echo 'You must only select 3 cards.';
    }
}

无法在列/表名称上绑定变量。

【讨论】:

  • 你应该把$db-&gt;setAttribute()$db-&gt;prepare()移出循环,不需要一遍又一遍地设置。
猜你喜欢
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
相关资源
最近更新 更多