我有一个民意调查,当用户点击其中一个选项时,它会通过ajax发送数据:
$.ajax({
type: 'POST',
url: '/poll.php',
data: {option: option, IDpoll: IDpoll},
dataType: 'json',
async: false,
error: function(xhr, status, error) {
alert(xhr.responseText);
},
success: function(data) {
if(data.msg == "0") {
$( "#pollArea" ).load( "/pollVote.php", { allow: true }, function() {
alert( "Ďakujeme za Váš hlas!" );
});
}
else {
alert(data.msg);
alert("V tejto ankete ste už hlasovali.");}
}
});
这很好用。现在数据传递给poll.php文件:
if (isset($_POST['option']) && isset($_POST['IDpoll'])) {
require 'includes/config.inc.php';
$ip = $_SERVER['REMOTE_ADDR'];
$option = $pdo->quote($_POST['option']);
$IDpoll = $pdo->quote($_POST['IDpoll']);
$date = date("d.m.Y H:i:s");
$poll = new Poll();
$msg = $poll->votePoll($IDpoll, $ip, $option, $date);
$arr = array(
'msg' => $msg
);
echo json_encode($arr);
这也有效,问题发生在Poll类 - 方法VotePoll:
public function votePoll($IDpoll, $ip, $option, $date)
{
try {
$query = "SELECT * FROM `votes` WHERE `IDpoll` = '$IDpoll' AND `ip` = '$ip'";
$result = $this->pdo->query($query);
if ($result->rowCount() == 0) {
/* do stuff */
}
catch (PDOException $e) {
return $e->getMessage();
}
}
来自ajax调用的错误消息如下:在非对象上调用成员函数rowCount()。我知道这条消息的含义,但我无法找出为什么变量$ result不被视为PDO对象。奇怪的是,当我尝试手动调用函数votePoll时,它工作正常,当我在结果上使用var_dump时它是PDO对象。那么错误在哪里?
编辑:我忘了说我只是在编辑这个功能。最初它与mysqli一起工作,但我想切换到pdo(所以查询和类似的东西都可以)。答案 0 :(得分:1)
所以,这个问题出现在以下几个方面:
$option = $pdo->quote($_POST['option']);
$IDpoll = $pdo->quote($_POST['IDpoll']);
PDO引用函数为字符串添加引号,因此选项变为“选项”等。然后它被发送到查询添加了其他引号,结果是''选项'',这是错误。