2012-02-15 80 views
0

我想知道$ link如何定义。它是一个全局内部类cdb.php,并在调用mysql连接时设置。如果它是未定义的,当mysql连接被调用时,它会因为我以这种方式编码而死亡。PHP未定义的变量,应该明确定义

<html> 
<head> 
</head> 
<body> 

<?php 
function justGetCSNumbers($input) 
{ 
$input = preg_replace('/[\D]/',"",$input); 
$sp = preg_split("/,/",$input); 
$numbs = preg_grep('/^(\d+)(,\d+)*$/',$sp); 
$csv = implode(",",$numbs); 
#echo $csv; 
return $csv; 
} 
function queryDB($cleaned) 
{ 
$split = preg_split('/,/',$cleaned); 
$resAy = array(); 
for($i=0;$i<count($split);$i++) 
{ 
     if((strlen($split[$i])>5)&&(strlen($split[$i])<10)) 
     { 
     $resAy[$i] = "uid='$split[$i]'"; 
     } 
} 
if(count($resAy)>0) 
{ 
$q = 'SELECT * FROM userbase WHERE '.$resAy[0];#.$whereclause; 
echo '<br/> query: '.$q.'<br/>'; 
connectDB(); 
return mysql_query($q,$link) or die("Couldn't complete query ".mysql_error($link)); 
} 
} 
function find(){ 
$p = $_POST['userToQuery']; 
if(isset($p)) 
{ 
$csv = justGetCSNumbers($p); 
$found= queryDB($csv); 
} 
} 
include('cdb.php'); 
find(); 
?> 

对不起格式不好的代码,使用vi。

我的apache2错误日志显示,当我在这里使用它时变量$ link是未定义的,即使在调用connectDB()之后;这是执行mysql_connect并因此设置链接的代码。 'mysql_error()期望参数1是资源,null' 我重构了我的代码,所以链接将被定义(此版本),但不知何故,我遇到了麻烦。

[编辑] 这里是cdb.php类:

<?php 
function connectDB() 
{ 
global $link; 
$uname = 'site123'; 
$pass = 'abc123'; 
$loc = "localhost"; 
$link = mysql_connect($loc, $uname, $pass) or die("Couldn't connect to the DB"); 
$dbname = 'jagrail'; 
$db = mysql_select_db($dbname,$link); 
     if(!$db) 
     {die("Failed to select db");} 
     if (mysqli_connect_errno()) { 
       printf("Connect failed: %s\n", mysqli_connect_error()); 

     } 
#return $link; 
} 
?> 

回答

1

编辑:

添加:

global $link; 

到queryDB()函数的顶部,从而使它知道$ link是一个全局变量,而不仅仅是一个本地变量。

+0

我以前使用的是确切的代码。它总是触发完全相同的错误。正如我上面所说的,“它是cdb.php类中的一个全局变量,并且在调用mysql连接时设置,如果在cdb.php中调用mysql连接时未定义它,它会因为我已经用这种方式编码而死“。这种获得$ link的方法在另一个类中完美工作,我不知道为什么它不在这里工作。 – YoYoMa 2012-02-15 01:53:56

+0

发布你的connectDB()方法(省略密码等)。 – jka6510 2012-02-15 01:56:12

+0

啊,全局变量,然后加上:global $ link;到queryDB()函数的顶部。 – jka6510 2012-02-15 01:58:27