2012-11-26 214 views
0

我想我的手在PHP自定義函數,以精簡了很多東西我已經另有手動做。我對自定義函數很陌生,所以我不確定這些限制。現在,我試圖讓使用自定義函數庫MySQLi這裏的數據的代碼,然後我會解釋這個問題:自定義函數查詢

function connect_db($db = 'db_username') { 
    iconv_set_encoding("internal_encoding", "UTF-8"); 
    mb_language('uni'); 
    mb_internal_encoding('UTF-8'); 
    @ $mysqli = new mysqli('host',$db,'password',$db); 
    if(mysqli_connect_errno()) 
    { 
     die('connection error'); 
    } 

} 

這一次似乎是工作的罰款。這是我遇到更多麻煩的下一個功能。

編輯:更新感謝Jeremy1026的響應

function do_query($db = 'default_db', $query) { 
    connect_db(); 
    $result = $mysqli->query($query); 
    if(!$result){ 
     trigger_error("data selection error"); 
    } 

    while($row = $result->fetch_assoc()){ 
     $result_array[] = $row; 
    } 
    return $result_array; 
} 

我的主人勢力的數據庫名和用戶名一樣的,所以如果數據庫名是「鮑勃」的用戶名來訪問這將是「鮑勃」因此,這就是爲什麼$db在連接中出現兩次。

我遇到的問題是,這兩個功能是functions.php從另一個頁面被調用。我希望能夠根據列名從其他頁面中的查詢中提取結果。但我也需要能夠與格式要做到這一點,這樣的話也許while()循環必須發生的網頁上,而不是在一個函數?我想這是儘可能普及,無論頁面或數據的,這樣我就可以使用這兩個功能對於所有連接和我在競選現場的三個數據庫的所有查詢。

上帝,我希望我是清楚的。

大在此先感謝您的任何建議。我GOOGLE了這一點,但它很難找到,這不是使用過時的mysql_前綴或任何實際上的方式,我可以使用返回數據什麼。

更新:訪問網頁時有問題,我現在得到以下錯誤:

致命錯誤:調用一個成員函數查詢()一個非對象在/功能。 PHP的`

與問題是$result = $mysqli->query($query);行。我想這是因爲它認爲$query是不確定的,但不應該是越來越被稱爲頁面的定義是什麼?這是該頁面的代碼:

$query = "SELECT * FROM `table`"; 
$myArray = do_query($db, $query); 
echo $myArray['column_name']; 

回答

2

在您的第二個函數中,您沒有返回任何數據,因此它正在丟失。你需要告訴它返回,見下圖:

function do_query($db = 'default_db', $query) { 
    connect_db(); 
    $result = $mysqli->query($query); 
    if(!$result){ 
     trigger_error("data selection error"); 
    } 

    while($row = $result->fetch_assoc()){ 
     $result_array[] = $row; 
    } 
    return $result_array; 
} 

然後,使用該功能時,你會做這樣的事情:

$myArray = do_query($db, 'select column from table'); 

$myArray然後將與您查詢的結果來填充。

+0

我得到'致命錯誤:不能使用[]讀取第31行的functions.php文件。這可能與我的PHP版本衝突嗎?我對這個錯誤進行了一些搜索,發現它可能不適合5.1之後的版本。或者我錯過了別的東西。 – Yhilan

+0

對不起,我的錯。它應該是'return $ result_array;'。我編輯了我的答案。 – Jeremy1026

+0

用你的代碼更新了這個問題(謝謝!)和我得到的新錯誤。 – Yhilan

1

這是一個半答案。以下單一功能可以代替這兩種功能。

function query_db($database, $new_query) { 
    $sqli = new mysqli('host', $database, 'password', $database); 
    $sqli->set_charset("utf8"); 

    global $result; 
    if($result = $sqli->query($new_query)){ 
     return $result; 
    } 
} 

通過添加global $result我能夠從查詢訪問的結果,從另一個頁面運行作爲

query_db("username","SELECT * FROM `column`"); 
while($row = $result->fetch_assoc()){ 
    print_r($row); 
} 

它更精簡比我有沒有的功能,但它仍然沒有想法。如果我在另一個函數中連接到數據庫,它不起作用。如果我嘗試將while循環放入組合函數中,則不起作用。我想,總比沒有好。