2014-03-06 33 views
2

我有一段代码在我的PHP文件(正常工作):在PHP中,SQLite3Result对象尚未正确初始化

$db = new Database(); 
$stmt = $db->prepare("SELECT * FROM bills WHERE group_id=:gid"); 
$stmt->bindValue(":gid", $_SESSION['group_id'], SQLITE3_INTEGER); 
if (($result = $stmt->execute()) === false) { 
    echo "bad"; 
} 

$bills = $result; 
while ($bill = $bills->fetchArray()) { 
    do stuff.... 
} 

然后我尽量把所有的数据库相关的代码功能:

function getBillsByGID($gid) { 
    $db = new Database(); 
    $stmt = $db->prepare("SELECT * FROM bills WHERE group_id=:gid"); 
    $stmt->bindValue(":gid", $gid, SQLITE3_INTEGER); 

    if (($result = $stmt->execute()) === false) { 
     return null; 
    } 

    return $result; 
} 

原始文件:

$bills = getBillsByGID($_SESSION['group_id']); 
while ($bill = $bills->fetchArray()) { 
     do stuff... 
} 

这给了我消息:"Warning: SQLite3Result::fetchArray(): The SQLite3Result object has not been correctly initialised in line 61"(有行))

var_dump($bills)调用该函数后给object(SQLite3Result)#10 (0) { }

那么,如何使一个功能,将正常工作?

回答

1

我认为你需要在你的函数取数据,然后返回你的变量

function getBillsByGID($gid) { 
    $db = new Database(); 
    $stmt = $db->prepare("SELECT * FROM bills WHERE group_id=:gid"); 
    $stmt->bindValue(":gid", $gid, SQLITE3_INTEGER); 

    if ($stmt->execute() === false) { 
     return null; 
    } 

    $array = array(); 
    while($data = $stmt->fetchArray()) 
    { 
     $array[] = $data; 
    } 

    return $array; 
} 

现在分配的功能给变量和循环扔,让您的阵列的数据

$bills = getBillsByGID($_SESSION['group_id']); 
foreach($bills as $data) { 
    //do stuff with $data 
} 
+0

谢谢,但问题是查询返回很多行,我想循环。您的解决方案只允许查看第一行。 – MrDaulet

+0

@MDdlet请检查我的更新回答 – Fabio

+0

太棒了!没想过。这解决了我的问题。然而,奇怪的是,我无法正确返回函数返回SQLite3Result对象... – MrDaulet

5

你在你的getBillsByGID中关闭语句?调用$ stmt-> close()使得从$ stmt-> execute()得到的结果无效。之后,调用$ result-> fetchArray()将会出现错误“SQLite3Result对象未在...中正确初始化”。

+0

有谁知道它为什么这样做? 'fetchArray()'直接调用数据库上的数据而不是变量或什么? – jayjyli