2013-08-22 143 views
1

在我創建的紙牌遊戲中,我需要在foreach循環中更新數據庫,因爲它們每3張牌就更新數據庫,以便爲他們創建的牌更新數據庫。在foreach循環中更新數據庫?

我遇到的問題是,即使它看起來是正確的,它不工作。

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中的''ss1'='13'處的WHERE comp = 0處使用正確的語法。

警告:PDOStatement :: execute():SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法中有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第126行的E:\ wamp \ www \ index.php中的''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; 
} 
+0

問題是你不能使用列/表名等變量綁定,因爲沒有「數據」,因此不支持綁定。恭喜發現。 – Passerby

回答

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.'; 
    } 
} 

不能綁定在科拉姆/表名變量的形式。

+1

你應該將'$ db-> setAttribute()'和'$ db-> prepare()'移出循環,不需要一遍又一遍地設置它。 –