繁体   English   中英

PHP的MySQL查询不返回任何东西

[英]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 )。

  • 绑定参数以防止SQL注入
  • 始终使用列列表(不要使用SELECT *
  • 如果返回> 1行,请使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM