javascript发布到数据库

时间:2012-10-14 21:44:32

标签: php javascript ajax

我正在尝试使用POSTAJAX将数据保存到数据库中。该脚本作为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);

1 个答案:

答案 0 :(得分:3)

KEYMATCHMySQL reserved keywords,因此您的陈述未做好充分准备。将它们包含在反引号中以将其用作列名:

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

至于为什么它没有抛出异常,请确保实际上已将PDO配置为抛出异常。如果不这样做,则$insert_key将为FALSE,并且您将获得E_WARNING次后续尝试绑定参数并执行它。

我建议确保error_reporting()已启用并且display_errors已启用,因此如果您没有抛出异常,而是导致脚本终止的致命错误,那么您应该至少在console.log()

中看到返回给AJAX调用者的错误输出
ini_set('display_errors', 1);
error_reporting(E_ALL);