MySQL 两次返回数据

Bla*_*owr 4 php mysql

我有以下代码,在尝试深入了解时进行了大量简化:

<?php
  $db_host   = $_ENV['DATABASE_SERVER'];
  $db_pass   = 'dummypassword';
  $db_user   = 'user';
  $db_name   = 'database';
  $db_char   = 'utf8';

  $db = new PDO("mysql:host=$db_host;dbname=$db_name;charset=$db_char", $db_user, $db_pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $email = 'david@example.com';

  if (!empty(trim($email)))
    {
      $sql = 'SELECT * FROM staff';
      $query = $db->prepare($sql);
      $query->execute();
      $results = $query->fetchAll();

      echo '<pre>';
      print_r($results);
      echo '</pre>';
    }
?>
Run Code Online (Sandbox Code Playgroud)

当我运行它时,查询工作正常,我没有收到任何错误。然而,我得到的是:

Array
(
    [0] => Array
        (
            [staff_id] => 1
            [0] => 1
            [staff_org] => 1
            [1] => 1
            [staff_email] => david@example.com
            [2] => david@example.com
            [staff_password] => hashyhashy
            [3] => hashyhashy
            [staff_first_name] => David
            [4] => David
            [staff_start_date] => 2014-03-17
            [7] => 2014-03-17
            [staff_leave_date] => 
            [8] => 
        )
)
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我不记得曾经看到它像这样返回数据两次(即使用命名键,然后又没有)。我的问题是......我是否失去了理智,这总是如何返回 MySQL 的结果?或者我做了什么让它做到这一点?

jer*_*oen 5

您将同时获得一个数字零索引键和一个关联键。如果您只需要关联数组,您可以执行以下操作:

$results = $query->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

如果你只想要数字键,你可以:

$results = $query->fetchAll(PDO::FETCH_NUM);
Run Code Online (Sandbox Code Playgroud)

查看手册上fetch()的更多详细信息。