1

POSTと を使用してデータベースにデータを保存しようとしていますAJAX。このスクリプトは、Firefox のユーザー スクリプトとして実行されます。スクリプトを実行してもエラーは表示されず、データベースには何も表示されません。

PHP

    $db_connection = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
    //$db_connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );  
    //$db_connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  
    //$db_connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $insert_key = $db_connection->prepare("INSERT into userstats (key, match, expire) VALUES (?, ?, ?, ?)");
    $insert_key->bindParam(1, $_POST["user"]);
    $insert_key->bindParam(2, $_POST["score"]);
    $insert_key->bindParam(3, $_POST["location"]);
    $insert_key->bindParam(4, $_POST["pointtime"]);
    $insert_key->execute();

    $db_connection = null;

    echo "saved to database!";

} catch(PDOException $e) {
    echo $e->getMessage();
}

JavaScript

xhr = new XMLHttpRequest();
xhr.open("POST", "stats.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", params.length);
xhr.setRequestHeader("Connection", "close");
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText);
    }
}

var params = "?user=james&score=5&location=homepage&pointtime=1350249055";
xhr.send(params);
4

1 に答える 1

3

KEYおよびMATCHMySQL の予約済みキーワードであるため、ステートメントが適切に準備されていません。列名として使用するには、それらをバッククォートで囲みます。

 $insert_key = $db_connection->prepare("INSERT into userstats (`key`, `match`, expire) VALUES (?, ?, ?, ?)");

例外がスローされなかった理由については、例外をスローするように PDO が実際に構成されていることを確認してください。そうしないと、パラメータをバインドして実行しようとする後続の試行で s が$insert_key返されFALSEます。E_WARNING

error_reporting()が有効でオンになっていることを確認することをお勧めしdisplay_errorsます。例外がスローされず、代わりに致命的なエラーが発生してスクリプトが終了した場合は、少なくともエラー出力が AJAX 呼び出し元に返されることを確認してください。console.log()

ini_set('display_errors', 1);
error_reporting(E_ALL);
于 2012-10-14T21:47:47.097 に答える