循环中全局变量的php范围
此代码连接到第一个数据库,循环并拾取一个名为“id”的字段,并将该id用作函数中另一个数据库的连接[数据库名称]。除了在函数中,id的值没有改变,因此无法连接到db之外,所有这些似乎都正常工作,即使它在局部变量中发生了变化。我想我需要取消设置和设置。有什么帮助吗?谢谢循环中全局变量的php范围,php,Php,此代码连接到第一个数据库,循环并拾取一个名为“id”的字段,并将该id用作函数中另一个数据库的连接[数据库名称]。除了在函数中,id的值没有改变,因此无法连接到db之外,所有这些似乎都正常工作,即使它在局部变量中发生了变化。我想我需要取消设置和设置。有什么帮助吗?谢谢 <? $dbhost = "***"; $dbname = "users"; $dbuser = "****"; $dbpass = "***"; function myRecordHandler($record) {
<?
$dbhost = "***";
$dbname = "users";
$dbuser = "****";
$dbpass = "***";
function myRecordHandler($record)
{
global $dbhost;
global $dbuser;
global $dbpass;
global $id;
global $conn2;
$db = mysql_select_db($id,$conn2) ;
$quantity = $record["QUANTITY"];
$price = $record["PRICE"];
$mytotal ="INSERT into `mytotal`(`quantity`,`price`) VALUES ($quantity,$price)";
mysql_query($mytotal,$conn2);
}
$conn1 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE) or die("MySQL Error: " .mysql_error());
$conn2 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname,$conn1) or die("MySQL Error: " . mysql_error());
$query = "SELECT id,url FROM table userdata";
$result = mysql_query($query,$conn1);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$id =$row['id'];
$url=$row['url'];
MagicParser_parse($url,"myRecordHandler","xml|PRODUCTS/PRODUCT/");
}
?>
我怀疑问题在于myRecordHandler()
是从MagicParser\u parse()
中调用的。它可能是在不共享相同全局名称空间的单独执行上下文中调用的。这只是一种预感,因为您将“myRecordHandler”作为字符串传递。只是一个注意事项:您的代码似乎易于SQL注入,因为您没有逃逸这些值。很难说问题出在哪里。在脚本的不同位置添加$id
的一些调试输出,以便更好地理解。调试显示函数中的id只有一个值集。嗯,非常混乱。为什么有两个mysql连接到同一个东西?当然。有一个包含文件。无论如何,打印出函数中id的值只显示一项。这可能意味着函数中应该存在某种全局变量的未设置和设置