Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php if语句中的mysql\u num\u行_Php_Mysql Num Rows - Fatal编程技术网

Php if语句中的mysql\u num\u行

Php if语句中的mysql\u num\u行,php,mysql-num-rows,Php,Mysql Num Rows,我面临的问题是,mysql_num_rows在整个代码中都给我一个1的输出,但是当我在if语句中匹配它时,它将返回true并执行代码。 所以$license返回。。。。。。。。而不是它的实际价值 我试图用这些工具自己调试这个问题 已尝试打印以查看数据是否存在。-对 尝试在第一部分回显$license-返回正确的值。 尝试检查mysql\u num\u行的值-返回1。 将其与if语句中的0匹配-由于值为1,因此当其应为false时返回true。 有什么帮助吗 $check = mysql_quer

我面临的问题是,mysql_num_rows在整个代码中都给我一个1的输出,但是当我在if语句中匹配它时,它将返回true并执行代码。 所以$license返回。。。。。。。。而不是它的实际价值

我试图用这些工具自己调试这个问题

已尝试打印以查看数据是否存在。-对 尝试在第一部分回显$license-返回正确的值。 尝试检查mysql\u num\u行的值-返回1。 将其与if语句中的0匹配-由于值为1,因此当其应为false时返回true。 有什么帮助吗

$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") or die(mysql_error
                                                                           ());
if (mysql_num_rows($check) > 0)
{
    while ($data = mysql_fetch_array($check))
    {
        print_r($data); // for test
        $name = $data['name'];
        $license = $data['pid'];
        echo $license; // test print 1
        $comments = $data['comments'];
    }

    if ($license == "Sgsmorgan")
        $license = "EWP Discounted Basic (Simpleleveraging)";
}

$count = mysql_num_rows($check); // for test
echo $count; // returns 1.
if (mysql_num_rows($check) == 0)
    $name = "";
$license = "...........";
echo $license;// test print 2
$comments = "Email doesnt exist in the database";

我认为问题在于,在这一点上,没有更多的行了,因为您的while循环已经获取了所有行

如果我没弄错的话,这个代码:

while ($ignored = mysql_fetch_array($check)) {
    echo "Got a row! Rows left: " . mysql_num_rows($check);
}
应该输出如下内容:

Got a row! Rows left: 3
Got a row! Rows left: 2
Got a row! Rows left: 1
Got a row! Rows left: 0

我认为问题在于,在这一点上,没有更多的行了,因为您的while循环已经获取了所有行

如果我没弄错的话,这个代码:

while ($ignored = mysql_fetch_array($check)) {
    echo "Got a row! Rows left: " . mysql_num_rows($check);
}
应该输出如下内容:

Got a row! Rows left: 3
Got a row! Rows left: 2
Got a row! Rows left: 1
Got a row! Rows left: 0
你的意思肯定是:

if (mysql_num_rows($check)==0)
{
    $name = "";
    $license = "...........";
    echo $license; //Test print 2
    $comments = "Email doesnt exist in the database";
}
而不是

if (mysql_num_rows($check)==0)
$name = "";
$license = "...........";
echo $license; //Test print 2
$comments = "Email doesnt exist in the database";
不使用花括号意味着只包含if语句下面的第一行。所以$license总是设置为

始终使用花括号。

你的意思肯定是:

if (mysql_num_rows($check)==0)
{
    $name = "";
    $license = "...........";
    echo $license; //Test print 2
    $comments = "Email doesnt exist in the database";
}
而不是

if (mysql_num_rows($check)==0)
$name = "";
$license = "...........";
echo $license; //Test print 2
$comments = "Email doesnt exist in the database";
不使用花括号意味着只包含if语句下面的第一行。所以$license总是设置为


始终使用花括号。

继David的根本原因之后,这里有一个非常简单的解决方法:

$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") 
         or die(mysql_error());

if (mysql_num_rows($check) > 0) {
    while ($data = mysql_fetch_array($check)) {
        $name    = $data['name'];
        $license = $data['pid'];
        $comments = $data['comments'];
    }

    $license = ($license == "Blahblah") ? "This is a second level license" : $license;

} else {
    $name = "";
    $license = "...........";
    $comments = "Email doesnt exist in the database";
}

关于David的根本原因,下面是一个非常简单的解决方案:

$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") 
         or die(mysql_error());

if (mysql_num_rows($check) > 0) {
    while ($data = mysql_fetch_array($check)) {
        $name    = $data['name'];
        $license = $data['pid'];
        $comments = $data['comments'];
    }

    $license = ($license == "Blahblah") ? "This is a second level license" : $license;

} else {
    $name = "";
    $license = "...........";
    $comments = "Email doesnt exist in the database";
}


mysql扩展已经过时,即将被弃用。新代码应该使用mysqli或PDO,两者都有重要的优点,比如支持预处理语句。说到这里,示例代码可能容易受到攻击。参数化语句以关闭漏洞。除非您正在编写数据库管理程序,否则不要使用;请只选择需要的列。为了可读性,请选择并应用。在将来,请考虑在发布代码之前先缩进代码。这将使发现错误更加容易。我同意你的两个评论。我只是在学习这一点,所以我想我会写一个基本的框架,它可以工作,然后把它固定起来,防止注射。关于*,使用它,因为这比提到3个字段容易,但肯定会做到。尽管如此,我还是找不到我的代码哪里出错了。。我已经看过很多次代码了。mysql扩展已经过时了,正在被弃用。新代码应该使用mysqli或PDO,两者都有重要的优点,比如支持预处理语句。说到这里,示例代码可能容易受到攻击。参数化语句以关闭漏洞。除非您正在编写数据库管理程序,否则不要使用;请只选择需要的列。为了可读性,请选择并应用。在将来,请考虑在发布代码之前先缩进代码。这将使发现错误更加容易。我同意你的两个评论。我只是在学习这一点,所以我想我会写一个基本的框架,它可以工作,然后把它固定起来,防止注射。关于*,使用它,因为这比提到3个字段容易,但肯定会做到。尽管如此,我还是找不到我的代码哪里出错了。。我已经检查了很多次代码。只有一行email='$email',我在if语句中将mysql_num_行的值检查为$count,然后将其与0匹配$count表示0,if语句也会变为true。@Kishor-好吧,如果不是while循环,那么如果将条件更改为:if$count==0,会发生什么?同样的事情。我发现是我错过了最后一个if语句下的花括号-_-只有一行email='$email'我在if语句中将mysql_num_行的值匹配为$count之前检查了它$count表示0,if语句也会变为true。@Kishor-好吧,如果不是while循环,那么如果将条件更改为:if$count==0,会发生什么?同样的事情。我发现是我错过了最后一个if语句下的花括号-_-@Kishor-为了证实Michael的理论,$name在最后设置的值是多少?这就解决了这个问题。我会记住这一点,不再重复:Thanks@Kishor:我仍然每周都会从$x=1而不是$x==1的条件中得到错误,所以我打赌你会再次重复所有类型的内容。当它击中你自己的头时,你只会变得更好。@Anthony,这就是为什么如果1==x,那么做是值得的,因为如果1=$x将导致一个解析错误。这不是很直观,但它不太容易出错,或者说,如果打开了错误报告,就很难漏掉错误。@Anthony:此外,另一个常见的习惯用法是在条件下围绕有意分配
带附加括号的:如果isset$foo&&$foo=trim$foo{…}。在Objective-C和其他一些语言之外,这不会产生任何通知,但会通知任何程序员不要将赋值更改为等价比较。@Kishor-为了证实Michael的理论,$name最后设置的值是多少?这就解决了这个问题。我会记住这一点,不再重复:Thanks@Kishor:我仍然每周都会从$x=1而不是$x==1的条件中得到错误,所以我打赌你会再次重复所有类型的内容。当它击中你自己的头时,你只会变得更好。@Anthony,这就是为什么如果1==x,那么做是值得的,因为如果1=$x将导致一个解析错误。这不是很直观,但不太容易出错,或者说,如果打开了错误报告,就很难漏掉错误。@Anthony:此外,另一个常见的习惯用法是在条件中用附加括号括住有意赋值:if isset$foo&&$foo=trim$foo{…}。在Objective-C和其他版本之外,这不会产生任何通知,但会通知所有程序员不要将赋值更改为等价比较。$license=$license==Blahblah?这是第二级许可证:$license;似乎有点困惑,因为我只是在学习php。不管怎么说,是我在最后一个if语句中漏掉了花括号。是的,我想,你漏掉它的部分原因是因为你养成了不在花括号中结束单行条件的坏习惯,这是有效的,但很难阅读,并且很快会导致你忘记其他条件在哪里打开和关闭。听从Michael的建议,始终使用花括号。我之所以将这一行改为条件语法,是因为它常常有助于清理一些您不想用3-5行代码来设置1变量的地方。$license=$license==Blahblah?这是第二级许可证:$license;似乎有点困惑,因为我只是在学习php。不管怎么说,是我在最后一个if语句中漏掉了花括号。是的,我想,你漏掉它的部分原因是因为你养成了不在花括号中结束单行条件的坏习惯,这是有效的,但很难阅读,并且很快会导致你忘记其他条件在哪里打开和关闭。听从Michael的建议,始终使用花括号。我之所以将这一行改为条件语法(conditional syntax),是因为它常常有助于清理一些您不想用3-5行代码来设置1 var的地方。