不能用函数保存$_POST数组到数据库


Can't save $_POST array to database with function

我有一个表单,它有多个相同名称的输入,结果是一个数组。我想将这个$_POST数组传递给一个函数,该函数将处理并保存该数组到数据库中。

我以前在没有使用函数的情况下做到了这一点,但是现在我想把它全部包含在一个漂亮整洁的函数调用中,它不会这样做,我不知道为什么?

所讨论的输入/post变量名为option[],并作为$_POST['option']传递给函数。下面是函数:

function newVariant($name, $option) {
global $db;
global $table_prefix;
$table = $table_prefix . "variants";
$query = $db->prepare("INSERT INTO $table(name) VALUES(:name)");
$query->bindParam(":name", $name);
if (!$query->execute()) {
    die(showMessage("Error!","There has been a problem saving your variant. Please try again or contact technical support if the problem persists.",""));
    }
$variant_id = $db->lastInsertId('id');
for($i = 0; $i < count($option); $i++) {
   if($option[$i] != "") {
      $table2 = $table_prefix . "variant_items";
      $query2 = $db->prepare("INSERT INTO $table2(variant, option) VALUES(:variant, :option)");
      $query2->bindParam(":variant", $variant_id);
      $query2->bindParam(":option", $option[$i]);
      if (!$query2->execute()) {
         die(showMessage("Error!","There has been a problem saving your variant. Please try again or contact technical support if the problem persists.",""));
      }
   }
}
$redirect = renderLink("/beyond/?act=admin&sub=variants", "true");
showMessage("Saving variant...<META HTTP-EQUIV='"Refresh'" Content='"1; URL=$redirect'">","","");
}

这是我在日志中得到的错误:

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option) VALUES(?, ?)' at line 1' in /Users/adampcollings/Sites/Hot Mint Development/beyond/php/functions/product.php:131
Stack trace:
#0 /Users/adampcollings/Sites/Hot Mint Development/beyond/php/functions/product.php(131): PDO->prepare('INSERT INTO bb_...')
#1 /Users/adampcollings/Sites/Hot Mint Development/beyond/html/admin/new-variant.php(5): newVariant('Test', Array)
#2 /Users/adampcollings/Sites/Hot Mint Development/beyond/php/html.php(19): include('/Users/adampcol...')
#3 /Users/adampcollings/Sites/Hot Mint Development/beyond/html/admin.php(10): subElement('admin', 'new-variant')
#4 /Users/adampcollings/Sites/Hot Mint Development/beyond/php/html.php(8): include('/Users/adampcol...')
#5 /Users/adampcollings/Sites/Hot Mint Development/beyond/index.php(14): siteElement('a in /Users/adampcollings/Sites/Hot Mint Development/beyond/php/functions/product.php on line 131

根据上面的评论,有几件事你应该尝试一下。

首先,在调试应用程序时始终启用错误报告。要在脚本中执行此操作,请添加:

error_reporting(E_ALL);

放到脚本的顶部。

第二,确保$options包含您期望的数据。在代码的某个地方,添加以下行:

var_dump($options);

这将显示$options的内容。如果它不包含您期望的值,请检查您的提交过程。

最后,如果$options包含预期的数据,检查表结构以确保查询匹配并插入正确的值。

编辑:在你发布MySQL错误后,我反复检查了MySQL保留词列表。"选项"这个词也在列表中。因此,查询失败,因为没有将单词识别为列名。尝试在列名周围加上反号:
$query2 = $db->prepare("INSERT INTO $table2(`variant`, `option`)...