-1

我一直在尝试制定准备好的语句,并在其中使用 $_POST 变量,但我在网上看到的任何东西似乎都不起作用。我知道这些问题是为了展示适当的研究,但我在网上找不到任何与这个问题相匹配的东西。请告诉我我做错了什么。

$dbh = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pass');
$currentdate = date("Y-m-d");
$key = md5(microtime().rand());
try {
  $query = $dbh->prepare("INSERT INTO requests (formname, formemail, formphone, formpostcode, formitem, formnotes, formbudget, formdatefor, currentdate, deletekey, resolved, deleted)
    VALUES (:name, :email, :phone, :postcode, :item, :notes, :budget, :datefor, :curentdate, :key, '0', '0')");

  $params = array_intersect_key($_POST, array('name', 'email', 'phone', 'postcode', 'item', 'notes', 'budget', 'datefor', 'currentdate', 'key'));
  $query->execute($params);
}
catch (PDOException $e) {
  error_log($e->getMessage());
  die("An error occurred, contact the site administrator.");
}
4

2 回答 2

2
$params = array_intersect_key($_POST, array('name', 'email', 'phone', 'postcode', 'item', 'notes', 'budget', 'date for', 'currentdate', 'key'));

右边的数组有 0,等。数组有键1,等等(我假设)。他们的交集不算什么。在两个数组的键上相交,而不是在一个数组的键和另一个数组的值上相交。2$_POSTnameemailarray_intersect_key

你要:

$params = array_intersect_key($_POST, array_flip(array('name', ...)));
                                      ^^^^^^^^^^

如果您尝试过,这将很容易弄清楚var_dump($params)

不过,您仍然应该在此处进行错误检查,因为无法保证$_POST包含您期望的所有值,在这种情况下,您将触发有关缺少参数的 PDO 错误。

于 2013-11-03T10:00:44.080 回答
0

我相信,您的 $_POST 数组键“currentdate”、“key”中没有任何位置。

于 2013-11-03T09:48:34.473 回答