Php 如果语句不起作用

Php 如果语句不起作用,php,mysql,Php,Mysql,如果数据库中“site”列下没有$entry值,我希望下面代码的输出为“$entry不存在”。但是,当我为$entry输入一个我知道不在数据库“site”列下的值时,就不会发生这种情况。我的if语句有问题吗 提前感谢, 约翰 $result=mysql\u查询(“显示来自feather的表”) 或者死(mysql_error()); while(list($table)=mysql\u fetch\u row($result)) { $sqlA=“从`$table`中选择COUNT(*),其中`

如果数据库中“site”列下没有$entry值,我希望下面代码的输出为“$entry不存在”。但是,当我为$entry输入一个我知道不在数据库“site”列下的值时,就不会发生这种情况。我的if语句有问题吗

提前感谢,

约翰

$result=mysql\u查询(“显示来自feather的表”)
或者死(mysql_error());
while(list($table)=mysql\u fetch\u row($result))
{
$sqlA=“从`$table`中选择COUNT(*),其中`site`类似于'$entry'”;
$resA=mysql\u query($sqlA)或die($sqlA:.mysql\u error());
如果(mysql_num_字段($resA)>0){
list($isThere)=mysql\u fetch\u row($resA);
如果($在此处)
{
$table_list[]=$table;
}
}
否则{
打印“

$条目不存在

\n”; } }
是。不过,您的格式设置并不能真正做到公正,请尝试将其清理干净,以便更容易理解。NetBeans IDE,甚至Zend Development Environment($)都可以自动进行代码格式化,这让生活变得更加轻松

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 
while(list($table)= mysql_fetch_row($result)) {
    $sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";

    $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
    if(mysql_num_fields($resA)>0){
        list($isThere) = mysql_fetch_row($resA);
        if ($isThere) {
            $table_list[] = $table;
        }
    } else{
        print "<p class=\"topic\">$entry does not exist</p>\n";
    }
}
$result=mysql\u query(“从feather显示表”)或die(mysql\u error());
while(list($table)=mysql\u fetch\u row($result)){
$sqlA=“从`$table`中选择COUNT(*),其中`site`类似于'$entry'”;
$resA=mysql\u query($sqlA)或die($sqlA:.mysql\u error());
如果(mysql_num_字段($resA)>0){
list($isThere)=mysql\u fetch\u row($resA);
如果($在此处){
$table_list[]=$table;
}
}否则{
打印“

$条目不存在

\n”; } }
简言之:

mysql_num_fields($resA)始终大于零,因为COUNT(*)函数将始终返回一个值,而不考虑(0、1或1000000等)

为了解决这个问题,把else提高一级,我会使用强制手段来确保安全。最后,mysql_num_字段不是必需的,因为您知道它总是1:

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 
while(list($table)= mysql_fetch_row($result)) {
    $sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";
    $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
    list($isThere) = mysql_fetch_row($resA);
    $isThere = intval($isThere);
    if ($isThere > 0) {
        $table_list[] = $table;
    } else{
        print "<p class=\"topic\">$entry does not exist</p>\n";
    }
}
$result=mysql\u query(“从feather显示表”)或die(mysql\u error());
while(list($table)=mysql\u fetch\u row($result)){
$sqlA=“从`$table`中选择COUNT(*),其中`site`类似于'$entry'”;
$resA=mysql\u query($sqlA)或die($sqlA:.mysql\u error());
list($isThere)=mysql\u fetch\u row($resA);
$isThere=intval($isThere);
如果($isThere>0){
$table_list[]=$table;
}否则{
打印“

$条目不存在

\n”; } }

就在这里。

是的。不过,您的格式设置并不能真正做到公正,请尝试将其清理干净,以便更容易理解。NetBeans IDE,甚至Zend Development Environment($)都可以自动进行代码格式化,这让生活变得更加轻松

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 
while(list($table)= mysql_fetch_row($result)) {
    $sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";

    $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
    if(mysql_num_fields($resA)>0){
        list($isThere) = mysql_fetch_row($resA);
        if ($isThere) {
            $table_list[] = $table;
        }
    } else{
        print "<p class=\"topic\">$entry does not exist</p>\n";
    }
}
$result=mysql\u query(“从feather显示表”)或die(mysql\u error());
while(list($table)=mysql\u fetch\u row($result)){
$sqlA=“从`$table`中选择COUNT(*),其中`site`类似于'$entry'”;
$resA=mysql\u query($sqlA)或die($sqlA:.mysql\u error());
如果(mysql_num_字段($resA)>0){
list($isThere)=mysql\u fetch\u row($resA);
如果($在此处){
$table_list[]=$table;
}
}否则{
打印“

$条目不存在

\n”; } }
简言之:

mysql_num_fields($resA)始终大于零,因为COUNT(*)函数将始终返回一个值,而不考虑(0、1或1000000等)

为了解决这个问题,把else提高一级,我会使用强制手段来确保安全。最后,mysql_num_字段不是必需的,因为您知道它总是1:

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 
while(list($table)= mysql_fetch_row($result)) {
    $sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";
    $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
    list($isThere) = mysql_fetch_row($resA);
    $isThere = intval($isThere);
    if ($isThere > 0) {
        $table_list[] = $table;
    } else{
        print "<p class=\"topic\">$entry does not exist</p>\n";
    }
}
$result=mysql\u query(“从feather显示表”)或die(mysql\u error());
while(list($table)=mysql\u fetch\u row($result)){
$sqlA=“从`$table`中选择COUNT(*),其中`site`类似于'$entry'”;
$resA=mysql\u query($sqlA)或die($sqlA:.mysql\u error());
list($isThere)=mysql\u fetch\u row($resA);
$isThere=intval($isThere);
如果($isThere>0){
$table_list[]=$table;
}否则{
打印“

$条目不存在

\n”; } }

这就是了。

出于对互联网的热爱,请不要自己构建SQL查询。使用。

出于对互联网的热爱,请不要自己构建SQL查询。使用。

缩进使代码难以阅读。应该说,缺少缩进。哎呀,是的,我绝对不是一个坚持压痕的人。我发现无论代码是否缩进,代码都很难阅读。缩进使代码很难阅读。我应该说缺少缩进。哎呀,是的,我绝对不是一个坚持压痕的人。我发现无论代码是否缩进,我都很难读懂。嗨,谢谢你的帮助。当我尝试您的代码时,当我为确实存在的$entry输入值时,它会多次打印“

$entry不存在。

\n”。嘿,我想我对我的问题采取了错误的方法,所以我要重新发布。很好的注释,伙计:)如果使用is int()/和/或is_null(),您的代码可能会更干净。因为如果有一个值,但它是一个“NULL”值(=问题),那么代码将通过intval()将其转换为“0”,并继续,而它不应该继续。您可以使用函数is_null()、is_empty()和is_int()!我同意,Olivier,但我想我的观点是,“SELECT COUNT(*)FROM…”永远不会返回NULL,FWICT。但是is_null或is_int等在其他情况下是正确的用法。您好,我感谢您的帮助。当我尝试您的代码时,当我为确实存在的$entry输入值时,它会多次打印“

$entry不存在。

\n”。嘿,我想我对我的问题采取了错误的方法,所以我要重新发布。很好的注释,伙计:)如果使用is int()/和/或is_null(),您的代码可能会更干净。因为如果有一个值,但它是一个“NULL”值(=问题),那么代码将通过intval()将其转换为“0”,并继续,而它不应该继续。您可以使用函数is_null()、is_empty()和is_int()!我同意,Olivier,但我想我的观点是,“SELECT COUNT(*)FROM…”永远不会返回NULL,FWICT。但是