我有这个代码。它仅用于测试目的,因此您无需告诉我使用参数绑定和预处理语句以及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中的名称
我的意思是,变量在那里。知道可能会发生什么吗?
答案 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
}
}
}
}
}