【发布时间】:2017-04-18 21:14:14
【问题描述】:
我有下面的 PHP 脚本,它生成一个 MySQL 查询并运行它,但是目前该查询返回一个空结果。
$sth = $dbh->prepare("SELECT TeamID FROM UserTeam WHERE UserID=? AND Deleted IS NULL");
$sth->execute(array($_POST['userID']));
$teams = $sth->fetchAll();
$sql = "SELECT * FROM Event WHERE UserID=? AND Deleted IS NULL";
if (count($teams) > 0) {
$sql .= " OR TeamID IN (";
foreach ($teams as $team){
$sql .= $team['TeamID'] . ",";
}
$sql = substr($sql, 0, -1);
$sql .= ")";
}
$sql .= " ORDER BY Created DESC LIMIT ?, 10 ";
$sth = $dbh->prepare($sql);
$sth->execute(array($_POST['userID'], $_POST['start']));
$events = $sth->fetchAll();
$response["success"] = 1;
$response["result"] = $events;
$response["sql"] = $sql;
$response["post"] = $_POST;
echo json_encode($response);
例如给出输出 JSON 数组:
{
"post" : {
"start" : "0",
"userID" : "33"
},
"result" : [
],
"sql" : "SELECT * FROM Event WHERE UserID=? AND Deleted IS NULL OR TeamID IN (12,13,17) ORDER BY Created DESC LIMIT ?, 10 ",
"success" : 1
}
但是,如果我手动对数据库运行生成的查询(将 ? 替换为正确的值),我会得到预期的结果(返回 10 个结果)
更新
甚至将 SQL 生成更改为硬编码值而不是 ?我还是没有结果。
即
{
"post" : {
"start" : "0",
"userID" : "33"
},
"result" : [
],
"sql" : "SELECT * FROM Event WHERE UserID=33 AND Deleted IS NULL OR TeamID IN (12,13,17) ORDER BY Created DESC LIMIT 0, 10 ",
"success" : 1
}
【问题讨论】:
-
尝试传递一个变量而不是
$_POST['userID'],您也可以通过在连接后添加这个$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);来启用错误模式 -
直接在数据库中运行查询,看看是否有错误。
-
已经说过它对数据库正常工作