从函数返回pdo fetch对象

时间:2013-11-20 19:28:01

标签: php mysql function pdo

您好我正在构建php pdo函数库,但我仍然坚持将fetchObject返回到while循环参数。当我试图加载页面时,它只是加载和加载,而不是打印任何结果。哦,是的,我的代码:

的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 />";
}

可能是什么问题?感谢您的帮助:)

2 个答案:

答案 0 :(得分:-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'];
}

答案 1 :(得分:-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 />";
}