我有下面的代码应该检查数据库中是否有某个用户名的条目,但是当我尝试添加一些代码来检查返回的行是否大于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)) {
(这些行在上面的代码中)
请有人帮我这个吗?
谢谢!
答案 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)