2017-08-26 63 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

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