我一直在尝试编写预处理语句,并在其中使用$ _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.");
}
答案 0 :(得分:2)
$params = array_intersect_key($_POST, array('name', 'email', 'phone', 'postcode', 'item', 'notes', 'budget', 'date for', 'currentdate', 'key'));
右侧的数组包含 键 0
,1
,2
等。$_POST
数组有键name
,email
等(我假设)。他们的交汇点没什么。 array_intersect_key
在两个数组的 键 上相交,而不是在一个键的键和另一个键的值上相交。
你想:
$params = array_intersect_key($_POST, array_flip(array('name', ...)));
^^^^^^^^^^
如果您尝试过var_dump($params)
,那么很容易理解。
你仍然应该在这里进行错误检查,因为没有任何保证$_POST
将包含你期望的所有值,在这种情况下你将触发关于缺少参数的PDO错误。
答案 1 :(得分:0)
我相信你的$ _POST数组键中没有任何地方'currentdate','key'。