2013-03-31 157 views
3

我使用PDO连接到MySQL数据库并获取所有数据。当我打印数组时,重复的值。如何解决它?谢谢为PDO返回的数组重复值

连接到DB:

$db = new PDO("mysql:host=localhost:3306;dbname=$dbName", $user, $pass, 
      array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

获取数据,并打印出结果:

$result = $db->query("select UserBirthday, UserAddress, UserZipCode, UserPhone, UserFirstName, 
       UserLastName, UserPassword, UserSecurityQuestion 
       from USER_PROFILE 
       where UserID=$userID;")->fetchAll(); 

    print_r($result); 

什么它打印出:

Array ([UserBirthday] => 1999-01-01 [0] => 1999-01-01 
[UserAddress] => 1 Infinite Loop Seattle [1] => 1 Infinite Loop Seattle 
[UserZipCode] => 98125 [2] => 98125 
[UserPhone] => 2068874596 [3] => 2068874596 
[UserFirstName] => abc [4] => abc 
[UserLastName] => cdf [5] => cdf 
[UserPassword] => 5271593ca406362d7a2701e331408ab77d5b5b88 [6] => 5271593ca406362d7a2701e331408ab77d5b5b88 [UserSecurityQuestion] => null [7] => null) 

回答

3

默认情况下,PDO将获取列按名称和索引。

使用PDO::FETCH_ASSOC提取模式,只是按名称获取:

$result = $db->query("select UserBirthday, UserAddress, UserZipCode, UserPhone, UserFirstName, 
      UserLastName, UserPassword, UserSecurityQuestion 
      from USER_PROFILE 
      where UserID=$userID;")->fetchAll(PDO::FETCH_ASSOC); 

还检查了替代fetch modes

+0

哦,非常感谢。但为什么会发生? – kaboom

+2

PDO默认获取模式是PDO :: FETCH_BOTH,它包含列名和数字索引。 – jwueller

0

正道

$dsn = "mysql:host=localhost;dbname=$dbName;charset=utf8"; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$db = new PDO($dsn,$user, $pass, $opt); 

$stm = $db->prepare("select * FROM USER_PROFILE where UserID=?"); 
$stm->execute(array($userID)); 
$data = $stm->fetch(); 
print_r($data); 
+0

这非常优雅,假设'PDO :: FETCH_ASSOC'是主要使用的获取模式。 +1! – jwueller