2012-02-15 83 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