【发布时间】:2015-05-30 18:24:23
【问题描述】:
我有一个对我的 PHP 文件的 AJAX 调用,它能够从/在数据库中检索和插入高分。检索部分工作得很好,但是每当我使用插入部分时,就会发生奇怪的事情!
当我进行 AJAX 调用时,我添加了 2 个参数:name 和 score。当 PDO 执行时,它总是插入 9 作为分数。我没有知道为什么会发生这种情况,当我在插入之前echo score 值时,它与我作为参数提供的完全相同!
你们中的哪一位可以帮我解决这个问题吗?
我的 AJAX 调用:
function sendHighScore(name, score) {
//name = string
//score = decimal
$.ajax({
url: "../php/score_server.php",
type: 'GET',
data: {
"action": "addScore",
"name": name,
"score": score
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
},
async: true
});
};
我的 PHP 文件:
<?php
$user = "xxxx";
$pass = "xxxx";
$dbh = new PDO('mysql:host=localhost; port=3307; dbname=Client', $user, $pass);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
if (isset($_GET['action']) && $_GET['action'] == 'getScore') {
$sqlGetScore = $dbh->prepare("SELECT * FROM score ORDER BY score");
if (!$sqlGetScore) {
echo "\nPDO::errorInfo1():\n";
print_r($dbh->errorInfo());
}
$sqlGetScore->execute();
$result = $sqlGetScore->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
} else if (isset($_GET['action']) && $_GET['action'] == 'addScore') {
$name = $_GET['name'];
$score = $_GET['score'];
echo "Before the prepare statement</br> ";
var_dump($name, $score);
$sqlAdd = $dbh->prepare("INSERT INTO score (name, score) VALUES (:name, :score)");
if (!$sqlAdd) {
echo "\nPDO::errorInfo1():\n";
print_r($dbh->errorInfo());
}
echo "</br>after the prepare statement, before the bindvalues</br> ";
var_dump($name, $score);
$sqlAdd->bindValue(":name", $name, PDO::PARAM_STR);
$sqlAdd->bindValue(":score", $score, PDO::PARAM_STR);
$sqlAdd->execute();
echo "</br>After the execute</br>";
var_dump($name, $score);
}
?>
当我查看数据库时,分数总是 9!有人可以看到此脚本中的任何错误吗?
编辑 var_dumps 后的结果:
在分数是十进制数和我使用 PARAM_STR 方面是否存在(未来)问题?
【问题讨论】:
-
我复制了 PHP 代码。这对我来说可以。你能把
var_dump($name, $score)的结果放在某个地方吗? -
@ockcyp 已添加!感谢您的宝贵时间
-
你也可以把你的表定义?看起来分数列太小了,无法容纳 12
-
啊,我明白了!我有
decimal(1,0)。我将其更改为Decimal(10,1),它工作正常!非常感谢!
标签: php mysql ajax database pdo