如何在mysql数据库中输入$ _POST数据

时间:2014-10-12 21:58:23

标签: php mysql

“列数与第1行的值计数不匹配”来自以下代码:

function rememberData($_POST) {
    foreach ($_POST as $key => $value) {
        $_SESSION[$key] = $value;
    }
    return $_SESSION;
}

以上是我将$ _POST存储到$ _SESSION中的方法。我在不同的页面上调用该方法。只需发布它即可显示该过程。

$columns = implode(",", array_keys($_SESSION));
$values = implode(",", array_values($_SESSION));

$sql = "INSERT INTO table ($columns) VALUES ('$values')";
// Execute query
if (mysqli_query($connection,$sql)) {
  echo "$key column was added";
} else {
  echo "Error adding columns: " . mysqli_error($connection);
}

我使用foreach将表单中的所有$ _POST数据存储到$ _SESSION中。当我var_dump会话时,数据与键完全匹配。我知道这不安全,但并不重要。有谁知道为什么我继续得到这个MYSQL错误?

编辑:添加了我如何设置$ _SESSION。我这样做,所以我可以访问多个页面的POST数据。

编辑2:下面告诉我,我有一个语法错误:你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'“name”,“Date0”,“Day0”,“UnitHours0”,“ProjectHours0”,“QwestMark0”,“TotalTickets0”,'第1行附近使用正确的语法

所以我认为这是开头和结尾的单引号,但如果我修剪它们就不会消失。它必须只是显示信息的浏览器?我的代码中没有任何单引号。这是由var_dump确认的。

foreach ($_SESSION as $key => $value) {
    $columns .= "\"$key\"" . ",";
    $values .= "\"$value\"" . ",";
}
$columns = rtrim($columns, ",");
$values = rtrim($values, ",");

echo $sql = "INSERT INTO tables ($columns) VALUES ($values)";
// Execute query
if (mysqli_query($connection,$sql)) {
  echo "$key column was added";
} else {
  echo mysqli_error($connection);
}

2 个答案:

答案 0 :(得分:1)

您将整个$值放入引号,使其成为单个字符串,而其每个值应为单独的字符串

$sql = "INSERT INTO table ($columns) VALUES ('$values')";
                                             ^  here ^

这将呈现,例如:

$sql = "INSERT INTO table ('column1', 'column2') VALUES ('value1, value2')";

意味着第一列的值为'value1, value2',第二列没有值。相反,它应该看起来像:

$sql = "INSERT INTO table ('column1', 'column2') VALUES ('value1', 'value2')";

因此,只有当$ _SESSION有一个或没有元素时,你的代码才会起作用。

答案 1 :(得分:0)

为什么要引用键,如果有的话应该是反引号。

对于双引号值,单引号更常见:

foreach ($_SESSION as $key => $value) {
    $columns .= "`$key`" . ",";
    $values .= "'$value'" . ",";
}

至于准备查询它不仅仅是为了安全性,如果你有不好的字符(例如单引号),它将破坏查询,所以至少使用mysqli_real_escape_string