php使用mysqli生成json数组

时间:2014-06-07 08:22:52

标签: php json mysqli

我正在为我正在建设的网站学习php / mysql。我把一切都工作了但是它非常容易受到攻击并且没有任何错误。我已经开始尝试保护我的代码,我要做的第一件事就是更好地处理错误并实现准备好的语句以避免sql注入。

不幸的是我遇到了第一道障碍,我最初创建了我的json数组:

$myArray=array();
$tempArray = array();

while ( $row = $results->fetch_assoc())
{   
    $tempArray[0] = $row['unix_timestamp(end_date)'];
    $tempArray[0] *= 1000;
    $tempArray[1] = $row['bid'];
    array_push($myArray, $tempArray);
}
echo json_encode ($myArray, JSON_NUMERIC_CHECK);

这很有效,我可以在我的网站上使用highcharts生成一个json。

我的问题是,我已经更新了我的代码以包含使用Preparebind_param的预准备语句,这些语句有效(通过简单地回显结果进行测试)但是我真的很难将错误归结为数组如上:

 while ( $row = $select_stmt->fetch())
{   
    printf("%s %s\n", $col1, $col2);
    //$tempArray[0] = $col2;
    //$tempArray[0] *= 1000;
    //$tempArray[1] = $col1;
   //array_push($myArray, $tempArray); 
}
//echo json_encode ($tempArray, JSON_NUMERIC_CHECK);

以上打印文本,但每当我尝试使用fetch_assoc是另一种选择(我已经做了很多谷歌搜索)我无法让它工作。我总是收到同样的错误“调用未定义的方法......”我如何复制我的工作并使用mysqli和bind_result生成一个数组?

我很高兴能够准确理解我的错误所在,因为我相信我错过了一个在寻找解决方案时导致我走错路的概念。

编辑 - 我已经检查过,我正在使用mysqlnd驱动程序

UPDATED Code - 我认为这更接近 - 在再次调用fetch_assoc之前使用get_result方法而不是“bind_result”。

$result = $select_stmt->get_result();
$myArray=array();
$tempArray = array();

 while ( $row = $result->fetch_assoc())
{
    $tempArray[0] = $row['end_date'];
    $tempArray[0] *= 1000;
    $tempArray[1] = $row['bid'];
    array_push($myArray, $tempArray);
}
echo json_encode ($tempArray, JSON_NUMERIC_CHECK);

不幸的是,它只检索第一个值而不是后续的10个或100个或1000个行

解决方案 - 在json_encode中更正数组并使用get_result函数

$result = $select_stmt->get_result();

$myArray=array();
$tempArray = array();

while ( $row = $result->fetch_assoc())
{
    foreach ($row as $r){
        $tempArray[0] = $row['end_date'];
        $tempArray[0] *= 1000;
        $tempArray[1] = $row['bid'];
        array_push($myArray, $tempArray);
    }
}
echo json_encode ($myArray, JSON_NUMERIC_CHECK);

1 个答案:

答案 0 :(得分:0)

在代码的最后,使用$ myArray而不是$ tempArray