首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >If语句返回true,而它应该是false。我认为

问If语句返回true,而它应该是false。我认为
EN

Stack Overflow用户
提问于 2012-08-02 11:53:46
回答 2查看 168关注 0票数 0

我有个很奇怪的问题。我正在尝试从WoW军火库导入数据,并在此过程中将此信息添加到我自己的数据库中的一个名为user的表下。

现在,我在添加新成员的同时检查当前成员的所有信息是否仍然正确(请记住,我将在此之后修复所有sql注入问题):

代码语言:javascript
复制
@$json = file_get_contents("http://$region.battle.net/api/wow/guild/$realm/$guild?fields=members,achievements");
if($json == false)
{
throw new Exception("Failed To load infomation. check setup options");
} 
$decode = json_decode($json, true);

foreach($decode['members'] as $p) {
    $mrank = $p['rank'];
    $mname = $p['character']['name'];
    $mclass = $p['character']['class'];
    $mrace = $p['character']['race'];
    $mlevel = $p['character']['level'];
    $mgender = $p['character']['gender'];

    $check = mysql_query("SELECT * FROM user WHERE charactername='$mname'");
    if($check == false)
    { 
        die("Sql query failed"); 
    }
    if(mysql_num_rows($check) != 0)
    {
        if($mlevel !== $check['level'])
        {
            mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "level $mname<br />"; 
        }
        if($mclass !== $check['class'])
        {
            mysql_query("UPDATE user SET class='$mclass' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "class $mname<br />"; 
        }
        if($mrace !== $check['race'])
        {
            mysql_query("UPDATE user SET race='$mrace' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "race $mname<br />"; 
        }
        if($mgender !== $check['gender'])
        {
            mysql_query("UPDATE user SET gender='$mgender' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "gender $mname<br />"; 
        }
        if($mrank !== $check['rank'])
        {
            mysql_query("UPDATE user SET rank='$mrank' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "rank $mname<br />"; 
        }
    $pCount = $pCount + 1;

    }   
    else
    {
    //add new user otherwise
        $sql="INSERT INTO user (charactername, class, race, level, gender, rank) VALUES ('$mname','$mclass','$mrace','$mlevel','$mgender','$mrank')";
        $nCount = $nCount + 1;
        if (!mysql_query($sql,$con))
            {
            die('Error: ' . mysql_error());
            }
    }
}
    echo "$nCount new members added.<br />";
    echo "$pCount member(s) already existed.<br />";
    echo "$uCount member(s) got updated <br />";

但现在的问题是,使用此代码的更新部分,所以所有的:

代码语言:javascript
复制
if($mlevel !== $check['level'])
        {
            mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
            $uCount = $uCount + 1; 
            echo "level $mname<br />"; 
        }

不管怎么说,我不明白为什么。我比较了两个数据,当回声时两者是相等的。因此,据我所知,使用!==应该只在它们不相同的情况下触发。在当前情况下,我让update脚本运行了800次。这样一来,user表中的所有数据也会更新800次。而据我所知,这不应该是必要的。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2012-08-02 12:03:27

您应该尝试!= php as !==检查它们是否具有完全相同的值和数据类型,并且由于检索两者的方式不同,php可能会为它们分配不同的数据类型

或者,您可以将$a =(int)$mlevel和$b =(Int)$check‘’level‘转换,然后执行!==

票数 2
EN

Stack Overflow用户

发布于 2012-08-02 13:25:33

虽然这可能不是最好的方法,但在找到@MatthewBlancarte的查询结果为Null后,我决定修改代码:

代码语言:javascript
复制
foreach($decode['members'] as $p) {
$mrank = $p['rank'];
$mname = $p['character']['name'];
$mclass = $p['character']['class'];
$mrace = $p['character']['race'];
$mlevel = $p['character']['level'];
$mgender = $p['character']['gender'];

$check = mysql_query("SELECT * FROM user WHERE charactername='$mname'");


while($row = mysql_fetch_array($check)){
    $prank = $row['rank'];
    $pname = $row['charactername'];
    $pclass = $row['class'];
    $prace = $row['race'];
    $plevel = $row['level'];
    $pgender = $row['gender'];
}

if($check == false)
{ 
    die("Sql query failed"); 
}

if(mysql_num_rows($check) != 0)
{   
    if($mlevel != $plevel)
    {
        mysql_query("UPDATE user SET level='$mlevel' WHERE charactername='$mname'");
        $uCount = $uCount + 1; 
        //echo "level $mname<br />"; 
    }

使用mysql_fetch_array添加额外的查询while循环:

代码语言:javascript
复制
while($row = mysql_fetch_array($check)){
    $prank = $row['rank'];
    $pname = $row['charactername'];
    $pclass = $row['class'];
    $prace = $row['race'];
    $plevel = $row['level'];
    $pgender = $row['gender'];

是修复它的方法,将其与这些变量进行比较。谢谢大家的帮助。在更多的人评论之前是的..我将修复sql注入..>.>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11770826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档