2013-11-20 229 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