我正在为我正在建设的网站学习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。
我的问题是,我已经更新了我的代码以包含使用Prepare
和bind_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);
答案 0 :(得分:0)
在代码的最后,使用$ myArray而不是$ tempArray