为什么PHP会为此代码发出未定义的变量消息?

时间:2012-03-14 19:27:30

标签: php sql mysqli

我有这个代码。它仅用于测试目的,因此您无需告诉我使用参数绑定和预处理语句以及PDO来避免SQL注入。

foreach($dd->getElementsByTagName("ReportItem") as $elmt){
    foreach ($elmt->childNodes as $node){
        if($node->nodeName==="ModuleName")
            $name = $node->nodeValue;

            if($result=mysqli_query($conn,"select * from technology_info where name = $name")){
                if(mysqli_num_rows($result)==0){

                    mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')");
                    //ERROR: Undefined variable: name 

                }

            }
        }
}

这是代码要完成的任务:如果变量$name是数据库中已有的值,则不执行任何操作。否则,将其添加到数据库中。

但是,我收到一条错误消息:注意:未定义的变量:/var/www/teste/index5.php中的名称

我的意思是,变量在那里。知道可能会发生什么吗?

5 个答案:

答案 0 :(得分:3)

因为$name仅被设置为if($node->nodeName==="ModuleName")。 if语句只适用于那一行,但它下面的代码(mysql语句)将继续运行,无论如何。

答案 1 :(得分:1)

$node->nodeValue可能是null,它将$name设置为null。 PHP会将其呈现为未定义。

答案 2 :(得分:1)

你遗漏了一组波浪状的括号

foreach($dd->getElementsByTagName("ReportItem") as $elmt){
foreach ($elmt->childNodes as $node){
    if($node->nodeName==="ModuleName")

    { // *** You left this out 

        $name = $node->nodeValue;

        if($result=mysqli_query($conn,"select * from technology_info where name = $name")){
            if(mysqli_num_rows($result)==0){

                mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')");
                //ERROR: Undefined variable: name 

            }

        }
    }
}
}

在查询中还需要一些$ name周围的引号。

答案 3 :(得分:0)

并非总是如果$ node-> nodeName不等于“ModuleName”那么永远不会创建$ name变量。尝试在循环外定义$ name变量,甚至在if语句之外定义。

答案 4 :(得分:0)

$ name超出范围。

尝试

foreach($dd->getElementsByTagName("ReportItem") as $elmt){
    foreach ($elmt->childNodes as $node){
        if($node->nodeName==="ModuleName"){
            $name = $node->nodeValue;
            if($result=mysqli_query($conn,"select * from technology_info where name = $name")){
                if(mysqli_num_rows($result)==0){
                    mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')");
                    //ERROR: Undefined variable: name 
                }
            }
        }
    }
}