【问题标题】:SELECT 1 FROM table, weird print_r resultSELECT 1 FROM table,奇怪的 print_r 结果
【发布时间】:2016-08-12 11:58:00
【问题描述】:

根据我的阅读,在我的 6 行 11 列的表上执行以下 sql 命令和 fetchAll() 时:

$sql = "SELECT 1 FROM table";
$sqlPrepared = $conn->prepare($sql)
$sqlPrepared->execute()
$result = $sqlPrepared->fetchAll();
$print_r($result);

我应该得到 6 行,每行只有一个值,每个值中的值都是 1。但是,我在每行中得到 6 行两个值,每个值中的值为 1:

Array ( 
  [0] => Array ( 
    [1] => 1 
    [2] => 1 ) 
  [1] => Array ( 
    [1] => 1 
    [2] => 1 ) 
  [2] => Array ( 
    [1] => 1 
    [2] => 1 ) 
  [3] => Array ( 
    [1] => 1 
    [2] => 1 ) 
  [4] => Array ( 
    [1] => 1 
    [2] => 1 ) 
  [5] => Array ( 
    [1] => 1 
    [2] => 1 ) 
) 

问题 1: 为什么我会为每个数组获得 2 个值而不是 1 个?

问题 2: 而不是内部数组

 Array ( 
    [1] => 1 ...

为什么不从[0]开始?:

 Array ( 
    [0] => 1 ...

【问题讨论】:

  • 1 应该是列名还是您的意思是*
  • @aldrin27 1 不是列名。 “SELECT 1 FROM”,这是一种常用的 sql 技术,它的输出几乎是我所期望的,找到的每一行的值“1”,但是我得到 2 列“1”一个奇怪的原因。
  • 我认为 1 检查它是否存在。 stackoverflow.com/questions/7171041/…

标签: php mysql pdo


【解决方案1】:

如果您没有在 ->fetchAll() 方法上提供任何标志,这包括多维数组行上的关联索引和数字索引。

所以当你使用SELECT 1 FROM时,关联索引是1(意思是,列名是1),并且由于数组键是唯一的,所以调整了数字索引,分配了带有值对的数字索引到2

【讨论】:

  • 很有趣,关联索引从 1 开始而不是 0 是否有原因?习俗? php团队随机决定?
  • @Webeng 不,列名是1,来自您的查询SELECT 1 FROM whatever_table_name
  • @Webeng 很高兴这有帮助
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2011-04-06
相关资源
最近更新 更多