检查是否返回了MySQL行> 10如果是这样运行某些代码,如果没有运行不同的代码

时间:2011-04-11 19:56:01

标签: php mysql database

我有下面的代码应该检查数据库中是否有某个用户名的条目,但是当我尝试添加一些代码来检查返回的行是否大于10然后运行一些代码来限制行数为10,如果没有,则运行另一段显示所有行的代码。

代码:

    mysql_select_db("blahblah", $con); //connect to database..
    $username =  basename(dirname(__FILE__));
    $username = mysql_real_escape_string($username);
    $checkres = mysql_query("SELECT COUNT link, notes, titles, color FROM links WHERE username='" . $username . "';");
    if ($checkres>10)
    {
    $resultsmall = mysql_query("SELECT link, notes, titles, color FROM links WHERE username='" . $username . "' LIMIT 10;");
    while ($rowsmall = mysql_fetch_array($resultsmall)) { //loop
      extract($rowsmall);
      $htmlsmall .= "
//code goes here to format results
                ";
    echo $htmlsmall; //display results...
    }
    }
    else {
    $result = mysql_query("SELECT link, notes, titles, color FROM links WHERE username='" . $username . "';");
    while ($row = mysql_fetch_array($result)) { //loop
      extract($row);
      $html .= "
            //code goes here to format results
                ";
    echo $html; //display results...
    }
    }
    mysql_close($con); //close db..

但它只显示数据库中行数的两倍,而不是限制它或全部显示它们。我该如何解决这个问题? //code goes here for formatting并不重要,它只是格式化代码,使其看起来不错,并将其显示在一个方框中......

谢谢!

编辑:

我现在有这个代码,但它现在根本没有显示任何内容?有人可以提供帮助:

代码:

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT SQL_CALC_FOUND_ROWS link, notes, titles, color FROM links WHERE username='" . $username . "' LIMIT 10";
$result = mysql_query($sql) or die("MySQL error: " . mysql_error());

$subsql = "SELECT found_rows() AS foundrows;";
$subresult = mysql_query($subsql) or die("MySQL error: " . mysql_error());
$found_rows = $subresult['foundrows'];

if($found_rows > 10)
{
  while($row = mysql_fetch_array($result))
  {
    extract ($row);
    $html .= "
      //getting values from columns and then formatting them goes here
    ";                                             

    echo "Only 10 is allowed.";
  }
} 
else
{
  while($row = mysql_fetch_array($result))
  {
    extract($row);
    $html .= "
      //getting values from columns and then formatting them goes here
    ";
  }
}
mysql_close($con); //close db..

谢谢!

编辑2(2011年4月12日14:03 GMT):

我现在有了这个代码,这个代码得到了Shrapnel上校的友好帮助,但它没有为我显示任何内容,我不知道为什么,请给我一些帮助。

代码:

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT link, notes, titles, color FROM links WHERE username='$username' LIMIT 10";
$res = mysql_query($sql);
if (mysql_num_rows() == 10) {
while ($row = mysql_fetch_array($res)) {
  extract($row);
  $htmlsmall .= "

=       “;         $ htmlfree。=“只允许10个。”;     echo $ htmlsmall;     echo $ htmlfree;     }     }     其他{     while($ row = mysql_fetch_array($ res)){       提取物($ rowsmall);       $ htmlsmall。=“

  ";
echo $htmlsmall;
}
}

现在,如果我查看页面源代码,我可以看到这两个错误:

<b>Warning</b>:  Wrong parameter count for mysql_num_rows() in <b>//url was here</b> on line <b>109</b><br /> 


<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>//url to file goes here</b> on line <b>125</b><br /> 

第109行是:if (mysql_num_rows() == 10) {

第125行是:while ($row = mysql_fetch_array($res)) {

(这些行在上面的代码中)

请有人帮我这个吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

mysql_query()返回结果语句句柄,如果查询失败则返回布尔值FALSE。您的外部查询无效:

SELECT COUNT ...

不起作用,因此查询失败,返回false,跳转到较低的“无限”查询。

然而,你正在以迂回的方式限制事物的过程,迫使查询至少运行两次。

你想要的是

$sql = "SELECT SQL_CALC_FOUND_ROWS link, notes, etc.... LIMIT 10";
$result = mysql_query($sql) or die("MySQL error: " . mysql_error());

$subsql = "SELECT found_rows() AS foundrows;";
$subresult = mysql_query($subsql) or die("MySQL error: " . mysql_error());
$found_rows = $subresult['foundrows'];

if ($found_rows > 10) {
   ... there's more than 10 rows available, though we're fetching only 10 because of the LIMIT
} else {
   ... 10 rows or less
}

如果LIMIT子句不存在,SQL_CALC_FOUND_ROWS是MySQL扩展,它会强制MySQL计算已提取的行数。您可以使用found_rows()查询功能获得此计算的结果。

这样,你只运行一次主查询,执行非常快速的found_rows()查询,然后离开。


鉴于您似乎没有在“超过10”和“10或更少”版本之间以不同方式格式化您的输出,除了“仅允许10行”之外,具体如何:

$sql = "...";
$result = mysql_query($sql) or die(mysql_error());

$rowcount = 0;
while ($row = mysql_fetch_assoc($result)) {
    $rowcount++;
    ... output a row ...
    if ($rowcount > 10) {
        echo "Only 10 allowed";
        break;
    }
}

不需要重复的代码,过多的逻辑等......当一些简单的事情发生时。

答案 1 :(得分:1)

  

我尝试添加一些代码来检查返回的行是否大于10,然后运行一些代码将行数限制为10

没有意义。
只需使用LIMIT 10运行您的查询,您就可以获得数据。

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT * FROM links WHERE username='$username' LIMIT 10";
$res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
while ($row = mysql_fetch_array($res)) {
  extract($rowsmall);
  $htmlsmall .= ""; //code goes here to format results
}
echo $htmlsmall;

这就是全部。 如果仍然想要回显“只允许10个”。 (不知道为什么)你可以在下面添加这3行

if (mysql_num_rows($res) == 10) {
  echo "Only 10 is allowed.";
}

但是我认为没有多大意义。

另请注意,您的程序设计可能有误,因为您显然正在为系统中的每个用户复制此文件

答案 2 :(得分:0)

要获得结果中返回的行数,必须使用mysql_num_rows。

if (mysql_num_rows($checkres)>10)