-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'));

右側の配列にはキー 01などがあります2$_POST配列にはキーnameなどがありますemail(私は推測しています)。それらの交差点は何もありません。一方のキーと他方の値ではなく、両方の配列のキーarray_intersect_keyで交差します。

あなたがしたい:

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

試してみれば、これは簡単に理解できたでしょうvar_dump($params)

ただし、期待するすべての値が含まれていることを保証するものは何もないため、ここでもエラー チェックを行う必要があり$_POSTます。その場合、欠落している引数に関する PDO エラーが発生します。

于 2013-11-03T10:00:44.080 に答える