2012-10-21 126 views
1

我不是php的專家,我開發了一個查詢mysql數據庫的小型服務。用於php的mysqli_stmt_get_result替代方案5.2.6

然而,我用PHP 5.4開發,然後發現我的網站託管計劃有5.2.6,所以我有一些未定義函數的問題。

具體而言,在這種情況下,如何解決> 5.3上可用的mysqli_stmt_get_result未定義函數?下面是代碼:

$stmt = mysqli_prepare($con,$db_query); 

    if($stmt) { 

    mysqli_stmt_bind_param($stmt,'ss',$after,$lang); 
    mysqli_stmt_execute($stmt); 
    $result = mysqli_stmt_get_result($stmt); // <-- getting undefined error here !!! 

    $updated = array(); 
    $deleted = array(); 

    while($row = mysqli_fetch_assoc($result)) { 

     if($row['status']==1) { 
      array_push($updated,$row); 
     } else { 
      $cardName=$row['cardName']; 
      $cardStatus=$row['status']; 
      $cardId=$row['cardId']; 
      $language=$row['language']; 
      array_push($deleted,array(
        'cardName'=>$cardName, 
            'status'=>$cardStatus, 
            'cardId'=>$cardId, 
            'language'=>$language 
           ) 
      ); 
     } 
    } 

    $response = array(
     'cards'=>array(
      'updated'=>$updated, 
      'deleted'=>$deleted 
     ) 
    ); 

    $json = json_encode($response); 
    mysqli_close($con); 
    echo $json; 

    } 

的一點是,我使用的是事先準備好的聲明,由於我缺乏知識的PHP,我發現解決問題,而不需要重寫整個劇本沒有其他辦法。

我認爲你們中的一些人可能有一個簡單而簡單的解決方案。

+0

相關:[bind_result到一個數組PHP的mysqli準備好的語句](http://stackoverflow.com/q/4496994/367456)和[如何從我的結果mysqli準備的查詢中獲取行對象數組](http://stackoverflow.com/q/6546353/367456)。 – hakre

回答

0

mysqli_stmt_get_result函數只是PHP 5.3或更高版本。它不適用於您的PHP 5.2.x版本(它不再支持btw)。

另一種方法是使用mysqli_stmt_bind_result和變量綁定。

在您的具體示例中,您甚至不需要將數組成員分配給變量,因爲您可以直接綁定這些變量。

mysqli_stmt_get_result函數被引入,因爲someone thought這將阻礙你的方式,並獲得一個數組本來會更容易。

+0

我在最後使用了mysqli_stmt_bind_result。但是我有很少的領域,所以我不得不多寫幾行。我希望有更清潔的東西。不過,我不明白爲什麼供應商不升級到最新的軟件版本!我閱讀5.2.x是2008年的老! – Leonardo

6

有類似的問題。順便說一句 - mysqlnd在5.3中可用,但它必須在。5.4中編譯,默認情況下它是在那裏編譯的。

在我的情況,我能保持我的大部分代碼,並使其通過更換工作,下面

$result = mysqli_stmt_get_result($stmt); // <-- doesn't work without mysqlnd 
while($row = mysqli_fetch_assoc($result)) { 
    $cardName=$row['cardName']; 
    ... 
} 

$stmt->bind_result($dbCardId, $dbCardName); // <-- one param for each field returned 
while ($stmt->fetch()) { 
    $cardName = $dbCardName; 
    ... 
}