2012-02-15 6 views
0

어떻게 $ link를 정의 할 수 있는지 궁금합니다. 이것은 내부 클래스 인 cdb.php이며 mysql 연결이 호출 될 때 설정됩니다. 이것이 정의되지 않았다면, mysql connect가 호출되었을 때, 나는 이렇게 코딩했기 때문에 죽을 것이다.명확하게 정의해야하는 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 오류 로그는 connectDB()를 호출 한 후에도 변수 $ link가 여기에 사용되면 정의되지 않았 음을 보여줍니다. 이 코드는 mysql_connect를 수행하고 따라서 링크를 설정하는 코드이다. 'mysql_error()는 매개 변수 1이 resource가 될 것으로 기대합니다.' 링크가 정의 될 수 있도록 (예 : 내 버전) 코드를 리팩터링했지만 어떻게 든 문제가 있습니다.

[EDIT] 여기 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

EDIT :

추가 : queryDB() 함수의 선두

global $link; 

, 그래서 $ link는 단지 지역 변수가 아니라 전역 변수라는 것을 알고 있습니다.

+0

이전에 정확한 코드를 사용하고있었습니다. 항상 동일한 오류가 발생했습니다. 위에서 말했듯이 "이 클래스는 cdb.php 클래스의 전역 변수이며 mysql connect가 호출 될 때 설정됩니다. mysql connect가 cdb.php 내부에서 호출 될 때 정의되지 않은 경우이 방법으로 코딩 했으므로 죽을 것입니다 . " $ link를 얻는 방법은 내가 가지고있는 다른 클래스에서 완벽하게 작동합니다. 왜 여기서 작동하지 않는지 모르겠습니다. – YoYoMa

+0

connectDB() 메소드를 게시하십시오 (암호는 생략하십시오). – jka6510

+0

아, 전역 변수 다음 추가 : 전역 $ 링크; queryDB() 함수의 맨 위. – jka6510