2013-03-31 2 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); 

무엇을 출력한다 : 기본적 PDO으로

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::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

관련 문제