2017-06-15 89 views
0

我有一個名爲functions.php.php文件,其中我必須插入函數,例如我有一個連接到我的數據庫的函數db_connect在PHP函數中的PDO查詢

function db_connect() 
{ 
    $PDO = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8', DB_USER, DB_PASS); 
    $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    return $PDO; 
} 

function Test($db) 
{ 
    $result = false; 
    $query = $db->prepare("SELECT * FROM impressoras"); 
    $query->execute(); 
    #Iterate 
    while($row = $query->fetch(PDO::FETCH_ASSOC)) { 
     $result[] = $row; 
    } 

    return $result; 
} 

被調用的頁面:

<?php 

    require('functions.php'); 
    $con = db_connect(); 
    print_r(Test($con)); 
?> 

但這不起作用,可能有人幫助我嗎?這似乎是錯誤500.

+0

您需要調用該函數,否則函數定義就會坐在那裏。 –

+0

我已經發布了我的網頁,但是返回錯誤500. – Skidrow

+0

出現500錯誤時,您應該在服務器錯誤日誌中找到消息。這將有助於縮小問題的範圍。但是我懷疑可能發生的是在你的'Test'函數的定義裏調用'Test' - 你有一個無限遞歸循環。 – andrewsi

回答

0

儘量遠離GLOBALS,做注入的數據庫,而不是。

function db_connect() 
    { 
     $PDO = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8', DB_USER, DB_PASS); 
     $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     return $PDO; 
    } 

function Test($db) 
    { 
     $result = false; 
     $query = $db->prepare("SELECT * FROM impressoras"); 
     $query->execute(); 
     # Iterate 
     while($row = $query->fetch(PDO::FETCH_ASSOC)) { 
      $result[] = $row; 
     } 

     return $result; 
    } 

下面是我的奇怪的例子可以運行:

# Create connection 
$con = db_connect(); 
# Inject 
print_r(Test($con)); 

你可能會想要做其他的東西在Test()功能,但這個想法是要注入的數據庫連接,這樣你可以將連接成相同的連接到頁面上的任何功能。

+0

不受歡迎,因爲我有一些querys,但我想穿上功能,你有一些訣竅在如何做到這一點? – Skidrow

+0

你是什麼意思你想放在功能? – Rasclatt

+0

例如,我有一個查詢可以在我的mysql表中選擇一臺打印機,但由於不必一直鍵入查詢,所以當我想爲打印機選擇此查詢時,我會調用該函數。 – Skidrow