【发布时间】:2011-10-20 11:09:17
【问题描述】:
我有以下代码,假设在准备好的 PHP mysql 语句中将字段值增加 1:
function db_OP_doVote($pdo, $postid, $votetype)
{
$prepStatement = $pdo->prepare(
"UPDATE content_posts SET `:votetype` = `:votetype` + 1 WHERE `id` = :id"
);
$prepStatement->execute(array(':votetype' => $votetype, ':id' => $postid));
echo "Success";
}
然而,这没有任何作用。不会因错误的 SQL 语法而返回错误,并且脚本会运行到完成,但我的字段根本没有更新。
这个脚本的值通过一个 jQuery post() 提供给这个脚本:
//isset checking here
$postID = (int)$_POST['id'];
$voteType = $_POST['type'];
if ($voteType == "y")
{
$trueType = "v-cool";
}
elseif ($voteType == "m")
{
$trueType = "v-meh";
}
elseif ($voteType == "n")
{
$trueType = "v-shit";
}
else
{
die();
}
$db = db_Connect();
db_OP_doVote($db, $postID, $trueType);
这似乎也可以过滤值并正常发送。我无法理解问题可能是什么。被递增的字段是 BIGINT(20)。
我错过了什么?
编辑:解决了这个问题。
NB 的评论一针见血——绑定列名会导致它被引用,这会使查询无效。谢谢!
【问题讨论】:
-
字符。问题似乎与 ajax->values 脚本无关,而是与准备好的语句有关 - :votetype 似乎没有正确准备
-
您不应该在准备好的语句中绑定列名。为什么?因为他们被引用了。你的
:votetype实际上是'votetype'。它可能报告了一个错误,但我看不到你在哪里捕获它。 -
如果它是你声称增加其价值的字符?