2012-02-15 15 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がリソースになることを期待しています。' リンクを定義するようにコードをリファクタリングしましたが、どういうわけか問題が発生しています。

[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接続が呼び出されると設定されます。mysql connectがcdb.php内で呼び出されたときに未定義の場合は、 " $ linkを取得するこのメソッドは、私が持っている別のクラスでは完全に動作しますが、なぜここでは動作しないのか分かりません。 – YoYoMa

+0

connectDB()メソッドをポストします(パスワードは省略します)。 – jka6510

+0

ああ、グローバル変数は、次に追加します:グローバル$リンク; queryDB()関数の先頭に移動します。 – jka6510

関連する問題