2017-08-26 62 views
2

我在PHP中有這個代碼,我試圖根據預準備語句的結果來創建一個JSON。問題是它正在返回一個完全白頁,沒有出現。如何從PHP中的MySQL準備語句創建JSON?

$con = mysqli_connect(HOST,USER,PASS,DB); 

$batch_sql = "select * from batchrecord"; 
$batch_res = mysqli_query($con,$batch_sql); 
$row = mysqli_fetch_array($batch_res); 
$batch_num = $row[0]; 
$start = $batch_num * 100; 
$end = $start + 99; 


if ($stmt = mysqli_prepare($con, "select tweetid, body from tweet where id >= 
? and id <= ?")) { 

    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "ii", $start, $end); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

    /* bind result variables */ 
    mysqli_stmt_bind_result($stmt, $tweetid, $body); 

    $result = array(); 

    /* fetch value */ 
    while(mysqli_stmt_fetch($stmt)){ 
     array_push($result, 
     array('Id'=>$tweetid, 
     'Body'=>$body, 
     )); 
    } 

    /* close statement */ 
    mysqli_stmt_close($stmt); 

    echo json_encode(array("result"=>$result), JSON_UNESCAPED_UNICODE); 
} 
else{ 
echo "Statement Prepare Error"; 
} 

mysqli_close($con); 

我已經由$ tweetid和$體內的含量要打印的同時語句測試中,它工作正常,這意味着問題不在於查詢的事,但與陣列。我錯過了什麼?

謝謝!

+0

注意:'mysqli'的面向對象的接口明顯不那麼冗長,使得代碼更易於閱讀和審計,並且不容易與陳舊的'mysql_query'接口混淆。在你過於投入程序風格之前,它是值得轉換的。例如:'$ db = new mysqli(...)'和'$ db-> prepare(「...」)過程接口是PHP4時代的一個神器,當引入mysqli API時,不應該在新的代碼 – tadman

+0

我不明白你爲什麼有兩個查詢 – Strawberry

+0

我會嘗試面向對象的,然後不知何故程序風格似乎更熟悉我 至於兩個查詢,是的,我注意到,我只能做一個沒有所有這些複雜因素,我很匆忙,沒有想太多,謝謝! –

回答

0

我發現這個問題的一些調試後。問題出在json_enconde函數中,因爲JSON_ERROR_UTF8類型的錯誤,這個函數默默無力。在我之前成功使用JSON_UNESCAPED_UNICODE之前,我有一些來自母語的特殊字符問題,但是這次我將mysqli_set_charset($con, "utf8");添加到了代碼的頂部,現在它正在工作。爲了完整起見,該語言是巴西葡萄牙語。完整的代碼如下。

$con = mysqli_connect(HOST,USER,PASS,DB); 

mysqli_set_charset($con, "utf8"); 

$batch_sql = "select * from batchrecord"; 
$batch_res = mysqli_query($con,$batch_sql); 
$row = mysqli_fetch_array($batch_res); 
$batch_num = $row[0]; 
$start = $batch_num * 100; 
$end = $start + 99; 


if ($stmt = mysqli_prepare($con, "select tweetid, body from tweet where id >= 
? and id <= ?")) { 

    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "ii", $start, $end); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

    /* bind result variables */ 
    mysqli_stmt_bind_result($stmt, $tweetid, $body); 

    $result = array(); 

    /* fetch value */ 
    while(mysqli_stmt_fetch($stmt)){ 
     $result[] = array('Id'=>$tweetid,'Body'=>$body); 
    } 

    /* close statement */ 
    mysqli_stmt_close($stmt); 

    echo json_encode(array("result"=>$result), JSON_UNESCAPED_UNICODE); 
} 
else{ 
echo "Statement Prepare Error"; 
} 

mysqli_close($con); 

感謝Barclick Flores Velasquez的幫助。我是新來的PHP,我不知道有print_r進行調試,它幫助我們找到了解決方案。

0

嘗試這樣

$result = array(); 
while(mysqli_stmt_fetch($stmt)){ 
     $result[] = array('Id'=>$tweetid,'Body'=>$body); 
    } 

演示:https://3v4l.org/XZOu5

+1

看到我上面的答案。感謝您的幫助,演示幫助了很多! –