2013-11-20 444 views
-1

您好我正在構建php pdo函數庫,但我堅持要返回fetchObject while while參數。當我試圖加載頁面時,它只是加載和加載,而不是打印任何結果。噢,我的代碼:從函數返回pdo獲取對象

的functions.php

function pdo_run($query, $autoval = null, $values = null) { 

global $stmt; 
global $db; 

$values = preg_match_all("~'([^']+)'~", $query, $matches); 

$stmt = $db->prepare("$query"); 

if (!$autoval) { 
    $stmt->execute($matches[0]); 
} 
else { 
    $stmt->execute($values); 
} 

} 

function pdo_result() { 

global $stmt; 

if ($stmt) { 
     return '$stmt->fetchObject(PDO::FETCH_ASSOC)'; 
} 
else { 
    trigger_error('generic ERROR: No pdo query found. Advanced info: global variable $stmt not found', E_USER_ERROR); 
    } 
} 

test.php的

pdo_run('SELECT * FROM settings'); 

while ($result = pdo_result()) { 
    echo $result['setting'] . "<br />"; 
     echo $result['value'] . "<br />"; 
} 

可能是什麼問題呢?感謝您的幫助:)

+1

這個功能使得完全沒有意義的。你不應該使用它。 –

+0

@Fred -ii-是的,我很抱歉,我修好了。 – aksu

+0

@你的常識我的功能有什麼問題? – aksu

回答

-1

最後,我發現如何做到這一點。我把return $stmt;添加到我的查詢函數中,然後我添加了查詢參數給我的pdo_result函數。查詢函數返回語句,並在結果函數中使用它。代碼:

function pdo_result($query) { 

$res = $query->fetch(PDO::FETCH_ASSOC); 

if (!isset($res)) { 
    trigger_error('PDO generic ERROR: No pdo query found', E_USER_ERROR); 
} 
else { 
    return $res; 
} 
} 

然後我用這樣的:

$query = pdo_run('SELECT * FROM settings'); 

while ($row = pdo_result($query)) { 
echo $row['setting'] . ': ' . $row['value']; 
} 
+0

這是非常有趣的函數:)你只寫了很多永遠不會執行的代碼,而唯一有意義的部分只是PDO語句獲取的同義詞調用。所以,你最好改變'while($ row = pdo_result($ query)){'to'while($ row = $ query-> fetch())){' - 至少它會使代碼變得明智。 –

+0

嗯,你可以按照你喜歡的方式去做,我看不出有什麼理由不應該這樣做。 – aksu

-2

以下是實現此功能的可能方法之一。你必須返回聲明,而不是全球化。當然,你應該避免這種可怕的自動魔法。

function pdo_run($query, $values = null) 
{ 
    global $db; // it could be questioned too, but let it be someone else 
    $stmt = $db->prepare($query); 
    $stmt->execute($values); 
    return $stmt; 
} 
$stmt = pdo_run('SELECT * FROM settings'); 
foreach ($stmt as $row) { 
    echo $row['setting'] . ": "; 
    echo $row['value'] . "<br />"; 
} 
+0

任何方式來做while循環? – aksu

+0

是的,你也可以在while循環中做到這一點。儘管我不知道爲什麼你會想要一個 –

+0

你能告訴我一個例子嗎? – aksu