[英]php MySQL query not returning anything
我不确定如何解释查询的功能,但是问题并不完全在于查询的设置,因为在另一个实例中,当我将其用作数组时它确实可以工作,但是当我将其用作数组时却无法工作将它与mysql_fetch_assoc()一起使用,所以这是我原始的查询(不是我遇到麻烦的那个):
SELECT * FROM
(SELECT * FROM comments
WHERE postID='$id' AND state='0'
ORDER BY id DESC LIMIT 3
) t ORDER BY id ASC
这样做是选择帖子上的最后3条评论,然后以另一种方式对它们进行排序(因此,它们以正确的顺序显示,从旧到新)现在这是用于直接回显评论数组的查询。 但是现在我要做的就是从3条评论中获得第一个ID。
这是我尝试做的(顺便说一句,此查询确实有效,当我替换上一个查询以在数组中回显结果时,但是我只需要获取ID即可使用,我不希望数组):
$previousIDq = mysql_fetch_assoc(mysql_query("
SELECT * FROM
(SELECT * FROM comments
WHERE postID='$id' AND state='0'
ORDER BY id DESC LIMIT 3
) t ORDER BY id ASC LIMIT 1"));
$previousID = $previousIDq['id']; //this doesn't return the id as I want it to.
您的问题可能是没有匹配的行。
另外,我认为您也可以将查询改进为:
SELECT * FROM comments WHERE postID='$id' AND state='0' ORDER BY id DESC LIMIT 2,1
但正如其他人所说,使用PDO或MySQLi,并使用准备好的语句。 并且永远不要选择*。
尝试var_dump($ previousID)看看你得到了什么
可能是给您一个对象,您需要从该对象获取ID。
请停止使用mysql_
函数编写新代码,因为它已被弃用 。 使用mysqli_
或PDO
函数(下面的mysqli
)。
SELECT *
) while
循环 mysqli_
解决方案 $link = mysqli_connect("localhost", "user_name", "password", "stock");
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}
$stmt = mysqli_prepare($link, "SELECT t.id FROM
(SELECT id FROM comments
WHERE postID = ? AND state = 0
ORDER BY id DESC
LIMIT 3) t
ORDER BY id ASC");
mysqli_bind_param($stmt, 's', $id) or die(mysqli_error($dbh));
$result = mysqli_stmt_execute($stmt) or die(mysqli_error($link));
while($row = mysqli_fetch_assoc($result)) {
echo $row[id];
}
mysqli_close($link);
mysql_
解决方案 $stmt = "SELECT t.id FROM
(SELECT id FROM comments
WHERE postID = $id AND state = 0
ORDER BY id DESC
LIMIT 3) t
ORDER BY id ASC";
$result = mysql_query($stmt) or die(mysql_error());
$row = mysql_fetch_assoc($result);
while($row = mysql_fetch_assoc($result)) {
echo $row[id];
}
您的脚本过于紧凑,无法进行错误处理,更不用说调试了
$mysql = mysql_connect(...
$query = "
SELECT * FROM
(SELECT * FROM comments
WHERE postID='$id' AND state='0'
ORDER BY id DESC LIMIT 3
) t ORDER BY id ASC LIMIT 1
";
$result = mysql_query($query, $mysql);
if ( !$result ) { // query failed
die('<pre>'.htmlspecialchars(mysql_error($mysql)).'</pre><pre>'.htmlspecialchars($query).'</pre>');
}
$previousIDq = mysql_fetch_assoc($result);
if ( !$previousIDq ) {
die('empty result set');
}
else {
$previousID = $previousIDq['id'];
}
您需要分离代码才能进行调试
$query = "SELECT * FROM
(SELECT * FROM comments
WHERE postID='$id' AND state='0'
ORDER BY id DESC LIMIT 3
) t ORDER BY id ASC LIMIT 1";
$result = mysql_query($query);
echo mysql_error(); //what eror comes out here
while($previousIDq = mysql_fetch_assoc($result))
{
print ($previousIDq['id']);
}
注意: mysql_ *已弃用,升级到mysqli或PDO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.