PHP PDO Select查询返回双精度值

时间:2017-06-01 12:01:00

标签: php ajax sqlite pdo

对于我的inhome temparature传感器,我正在使用带有php,sqlite,PDO和HTML的覆盆子pi。

我在sqlite中创建了一个表

使用

BEGIN;
CREATE TABLE waarden (datum TEXT, tijd TEXT, zone TEXT, lucht REAL, temperatuur REAL);
COMMIT;

我使用DHT22的rpi记录了所有内容,所以没有我使用以下php.file创建通过AJAX访问数据的网页

<?php
function datumConversie($datum){    
    $delen = explode('/',$datum,3);
    $geconverteerd  = $delen[2].$delen[0].$delen[1];
    return $geconverteerd;
}
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

$db = new PDO("sqlite:/home/pi/sensor.db");
$result_array = array();
$date = $_POST["datepicker"];
$waarde = datumConversie($date);
$tijd=""; 
$temperatuur="";
$query = "SELECT datum, tijd, zone,lucht, temperatuur FROM waarden WHERE datum = $waarde";
$result = $db->query($query);

foreach($result as $row)
{
    array_push($result_array, $row);
}
echo json_encode($result_array);
$db = null;
?>

问题是,当我查看浏览器响应时,似乎值返回两次。一次使用适当的字段名称,一次使用其列索引。 (0是基准,1是tijd等)。见下文

{ “基准”: “20170601”, “0”: “20170601”, “tijd”: “00:01”, “1”: “00:01”, “区”: “kelder”,“2 “:” kelder”, “卢赫特”: “53.0”, “3”: “53.0”, “temperatuur”: “24.3”, “4”: “24.3”}, { “基准”: “20170601”, “0”: “20170601”, “tijd”: “0点06分”, “1”: “0点06分”, “区”: “kelder”, “2”:” kelder”, “卢赫特”: “53.1”, “3”: “53.1”, “temperatuur”: “24.3”, “4”: “24.3”}, { “基准”: “20170601”, “0”: “20170601”, “tijd”: “0点11”, “1”: “0点11”, “区”: “kelder”, “2”:” kelder”, “卢赫特”: “53.1”, “3”: “53.1”, “temperatuur”: “24.2”, “4”: “24.2”},

我该如何避免这种情况。我已经尝试了几次可以在最后工作的转换,但这只是修补了一些缺陷而没有解决原因?

任何建议

2 个答案:

答案 0 :(得分:3)

设置默认的提取模式,如此

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

或者

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

在运行fetch之前

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
foreach($result as $row) {
    array_push($result_array, $row);
}

或者使用fetchAll()替换为一个衬垫,并使用准备好的和参数化的语句来缓解SQL Injection Attack

$query = "SELECT datum, tijd, zone,lucht, temperatuur 
            FROM waarden 
            WHERE datum = :datum";
$result->prepare($query);

$result->execute([':datum'=>$waarde]);

$result_array = $result->fetchAll(PDO::FETCH_ASSOC);

fetchAll(PDO::FETCH_ASSOC)的参数控制结果的返回方式。

答案 1 :(得分:1)

试试这个示例代码......

$sth = $db->prepare("SELECT datum, tijd, zone,lucht, temperatuur FROM waarden WHERE datum = :datum");
$sth->execute(array('datum' => $waarde));
$result = $sth->fetchAll(PDO::FETCH_ASSOC);

echo '<pre>';
print_r($result);
echo '</pre>';