【问题标题】:SQLite3 field names not recognized by PHP in result set associative array [closed]PHP在结果集关联数组中无法识别SQLite3字段名称[关闭]
【发布时间】:2019-04-12 07:49:55
【问题描述】:

当我从 SQLite3 数据库中检索一行时,使用关联索引和数字索引的默认 fetch() 模式,数字索引有效,但如果我尝试使用关联索引,我会得到“未定义的索引”。也就是说,

$timeReadBack = $resultArray2[0];

给出正确的结果,但是

$timeReadBack = $resultArray2['startTime'];

给出“未定义的索引”。

我是积极的我的字段名称是正确的。

这是整个序列:

$result2 = $db->prepare( 'SELECT parameterValue FROM CurrentState WHERE parameterName = ?;' );
$result2->bindValue(1,'startTime');
$selectStatement = $result2->execute();
$resultArray2 = $result2->fetch();
$timeReadBack = $resultArray2[0];

parameterNameparameterValue 是表中的 TEXT 字段。

【问题讨论】:

  • 调试提示添加 var_dump($resultArray2) 并查看该数组中的确切内容!
  • 如果您向我们展示填充 $resultArray2 的查询也会有所帮助,这样我们就不必与您一起玩 20 个问题来获取所有相关信息。见Minimal, Complete and Verifiable Examplethe perfect questionQuestion Check list
  • 更不用说你用来获取结果的代码了。
  • 使用默认 fetch() 默认为PDO::FETCH_BOTH。字段名称区分大小写。如果startTime 是选择字段的一部分,还要检查 SQL 查询。
  • 代码添加到问题

标签: php pdo sqlite


【解决方案1】:

您的 SELECT 不包含名为 startTime 的字段。因此,$resultArray2 将仅包含来自 SELECT 字段的键(仅 parameterValue)。

SELECT parameterValue FROM CurrentState WHERE parameterName = ?

另外,您正在使用startTime 绑定参数。这意味着startTime 是一个值,而不是字段名。因此,您不能通过值访问列,只能用于字段名称parameterValue

$result2 = $db->prepare( 'SELECT parameterValue FROM CurrentState WHERE parameterName = ?;' );
$result2->bindValue(1,'startTime');
$selectStatement = $result2->execute();
$resultArray2 = $result2->fetch();
$timeReadBack = $resultArray2[0];
$timeReadBack = $resultArray2['parameterValue']; // 'startTime' is a value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多