2013-10-03 107 views
0

我有这样一段代码:如果SQL没有返回查询

require_once('connectvars2.php'); //This is the connection to my database 
       $data = mysql_query("SELECT * FROM calzone ORDER BY id DESC"); 
       if (isset($_POST['submit'])) { 
       $post = trim($_POST['post']); 
       $data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
        if (!(empty($data))) { // This is my poor attempt :-) 
        echo 'No result!'; 
        } 
       } 

这是在我的网站我的搜索功能。

如果没有与搜索字匹配的查询,我希望它返回一些内容。说如果我写“6737”并且数据库找不到结果,它应该打印“对不起,但没有搜索结果!”。 有没有办法让MySQL检查是否有返回任何查询?如果没有,回显一些文字?

+0

您可以简单地对行mysql_num_rows进行计数,但您实际上不应该将变量嵌入非常危险的查询字符串中,请考虑查看PDO。 –

+0

['mysql_num_rows()'](http://php.net/mysql-num-rows)。另外[清理您的输入](http://xkcd.com/327/) –

+0

如何让它不返回警告?这与@对吗?我只是不知道该把它放在哪里 – owwyess

回答

1

使用mysql_num_rows函数来计数。行..

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
$num=mysql_num_rows($data); 
if($num==0) 
{ 
    echo 'Sorry, but theres no results for your search'; 
} 
1
require_once('connectvars2.php'); //This is the connection to my database 
       $data = mysql_query("SELECT * FROM calzone ORDER BY id DESC"); 
       if (isset($_POST['submit'])) { 
       $post = trim($_POST['post']); 
       $data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
    if (mysql_num_rows($data) == 0){ 
     echo "Sorry, but there's no results for your search!"; 
    }else{ 
    echo "matched"; 
    } 

       } 
0

你可能寻找mysql_num_rows

使用这样

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if (mysql_num_rows($data) == 0) { 
    echo 'No result!'; 
} 

在一个侧面说明;您正在使用mysql_XX函数来访问数据库。这些已被Mysqli和MySQL(PDO)取代。使用这些最新库中的一个。

+0

你好,我知道这是非常糟糕的做法,我目前正在用准备好的语句和mysqli进行登录,以正确的形式练习。但这对我的一个朋友来说只是一个快速修复的事情。我还想知道,如果我喜欢打印出没有返回的行,我该如何停止打印返回失败?这与@对吗?我只是不记得放置在哪里。谢谢 – owwyess

+0

我不确定你的意思是回归失败。 '@'会忽略命令生成的任何错误 - http://php.net/manual/en/language.operators。errorcontrol.php。它应该谨慎使用,因为在没有正当原因的情况下抑制错误或者至少在日志中可能会变得难以调试。 – Kami

+0

是的,但它带有一个错误,因为它没有返回正确的查询?所以我必须删除它,以便用户不会看到错误,只有在没有找到quieries时显示的消息 – owwyess

1

使用

if(mysql_num_rows($data)==0){ 
    echo "Sorry, but there's no results for your search"; 
} 
0

使用mysql_num_rows($数据)== 0

虽然你应该使用mysqli,而不是MySQL作为MySQL是时下弃用

0

首先,你应该不使用mysql_ -functions导致此PHP扩展已被弃用。尝试使用PDOMysqli扩展。

顺便说一句,在这个扩展有mysql_num_rowsfunction这正是你想要的。

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if (!mysql_num_rows($data)) { 
    echo 'No result!'; 
} 
+0

你好,我知道这是非常糟糕的做法,我目前正在用准备好的陈述和mysqli进行登录,以正确的形式练习。但这对我的一个朋友来说只是一个快速修复的事情。我还想知道,如果我喜欢打印出没有返回的行,我该如何停止打印返回失败?这与@对吗?我只是不记得放置在哪里。谢谢 – owwyess

+0

@ user2826397是的,@是PHP支持的唯一错误控制操作符。当在PHP中添加表达式时,可能会忽略可能由该表达式生成的任何错误消息。 – zavg

2

使用mysql_num_rows

$data = mysql_query("SELECT * FROM calzone WHERE overskrift LIKE '%$post%' OR postnummer = '$post'"); 
if(mysql_num_rows($data) > 0){ 
    //show your data 
} 
else{ 
    echo "Sorry, but there are no results for your search!"; 
} 

此外,如前所述,请求mysql_query已被弃用。切换到PDO。