PHP PDO Select 查询返回 double 值

标签 php ajax sqlite pdo

对于我的家用温度传感器,我使用带有 php、sqlite、PDO 和 HTML 的树莓派。

我在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 等)。见下文

{"datum":"20170601","0":"20170601","tijd":"00:01","1":"00:01","zone":"kelder","2 ":"kelder","lucht":"53.0","3":"53.0","temperatuur":"24.3","4":"24.3"}, {“基准”:“20170601”,“0”:“20170601”,“tijd”:“00:06”,“1”:“00:06”,“区域”:“kelder”,“2”:“kelder","lucht":"53.1","3":"53.1","temperatuur":"24.3","4":"24.3"}, {“基准”:“20170601”,“0”:“20170601”,“tijd”:“00:11”,“1”:“00:11”,“区域”:“kelder”,“2”:“kelder","lucht":"53.1","3":"53.1","temperatuur":"24.2","4":"24.2"},

我怎样才能避免这种情况。我已经尝试了几种转换,它们最终都可以工作,但这只是修补了一些缺陷,而没有解决问题的根源?

有什么建议

最佳答案

像这样设置默认的抓取模式

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

或者

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

在运行抓取之前

$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) 的参数控制返回结果的方式。

关于PHP PDO Select 查询返回 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306979/

相关文章:

php - 从数据库 mysql 和 PHP 应用折扣

sqlite - 嵌套0​​x104567910(或AND、OR语句)SQLite

php - 如何根据父下拉列表选择动态选择子下拉列表

php - 连续将数据存储到数据库,无需按 'Submit' og 'Next'

php - 不将任何数据发布到 URL 参数中的页面

android - 检索数据库中所有表的列表

sqlite - Codeception - 由于配置无效,无法使用 DB 模块

PHP 和 MySQL 分页

php - php 的标准生产设置

php - 默认值 TextArea 神秘空间