복붙노트

[SQL] PDO를 사용하여 결과의 ​​지표로서 열 값을 이용하여

SQL

PDO를 사용하여 결과의 ​​지표로서 열 값을 이용하여

나는 열 ID, 이름, URL에 '브랜드'라는 SQL 테이블을 가지고있다. 그 테이블에서 나는이 데이터 세트를 가지고 :

1, Solidfloor, solidfloor;
2, Quickstep, quickstep;
4, Cleanfloor, cleanfloor;
5, Blue Dolphin, blue-dolphin;
6, Krono, krono;
8, Meister, meister;

내가 증가 된 숫자하지의 배열의 인덱스하지만 특정 행의 ID가 필요, 나는 모두 지금을 가져 오는 그리고 난 대가로 좋은 배열을 얻을 수 있지만. 나는 결과 집합을 통해 코스 루프의 수 있지만,이 일을하는 청소기 방법은 무엇입니까?

해결법

  1. ==============================

    1.ASSOC로 가져 오기

    ASSOC로 가져 오기

    수동의 경우 : http://php.net/manual/en/pdostatement.fetchall.php

    fetch_style

    그 마지막 부분이 핵심입니다. 그것은 (I 찾을 수 있음) 완전히 문서화하지 않는 것, 대신 PDO :: FETCH_COLUMN, 당신이 결합 할 수 PDO :: FETCH_ASSOC와 PDO :: FETCH_GROUP 원하는 결과를 달성하기 위해 :

    $PDOstmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP)
    

    그래서, 위의 데이터를 주어진 :

    $stmt = $PDO_obj->prepare('select * from brands');
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
    d($result);
    

    결과 :

    array (6) [
        '1' => array (1) [
            array (2) [
                'name' => string (10) "Solidfloor"
                'url' => string (10) "solidfloor"
            ]
        ]
        '2' => array (1) [
            array (2) [
                'name' => string (9) "Quickstep"
                'url' => string (9) "quickstep"
            ]
        ]
        '4' => array (1) [
            array (2) [
                'name' => string (10) "Cleanfloor"
                'url' => string (10) "cleanfloor"
            ]
        ]
        '5' => array (1) [
            array (2) [
                'name' => string (12) "Blue Dolphin"
                'url' => string (12) "blue-dolphin"
            ]
        ]
        '6' => array (1) [
            array (2) [
                'name' => string (5) "Krono"
                'url' => string (5) "krono"
            ]
        ]
        '8' => array (1) [
            array (2) [
                'name' => string (7) "Meister"
                'url' => string (7) "meister"
            ]
        ]
    ]
    

    (d ()는 () 단지 편리한 디버깅 위해서 var_dump 같은 kint 라이브러리 함수 () 또는 인 print_r이다)

    당신은 당신이 원하는 열을 선택하기 위해 SELECT 문을 수정할 수 있도록 참고 열이 인덱스에 사용하는 배열은 항상 결과의 첫 번째 열 것입니다. 그리고 인덱스 열이 각 행의 배열 밖으로 제거된다는 것을 또한주의; 그것을 해결하기 위해, 당신은 당신의 선택 문에 두 번 열을 추가 할 수 있습니다 (즉, 선택 아이디, 브랜드. * 브랜드에서, 등).

    반드시 각 인덱스는 한 번만 사용되었는지 확인하기 위해 PDO :: FETCH_UNIQUE처럼 http://php.net/manual/en/pdostatement.fetch.php : 여기 문서화 이상의 매개 변수가 있습니다.

  2. ==============================

    2.PDO 있지만 :: PHP 설명서에 FETCH_UNIQUE 설명은 매우 불분명하지만, 당신이 실제로 필요한 매개 변수 사실 그것은 정확한입니다.

    PDO 있지만 :: PHP 설명서에 FETCH_UNIQUE 설명은 매우 불분명하지만, 당신이 실제로 필요한 매개 변수 사실 그것은 정확한입니다.

    $data = $pdo->query('SELECT * FROM table')->fetchAll(PDO::FETCH_UNIQUE);
    

    당신에게 (귀하의 경우 ID를해야합니다 * 테이블 정의에서 먼저 필드를 사용하는 경우) 첫번째 SELECT 절에 나와있는 필드에 의해 색인 배열을주고있다.

    단지 PDO를 사용하여 기본 ::으로 FETCH_UNIQUE이 두 배 값을 당신에게 결과 행을주지 않습니다. 당신도이 호출에 선호 행 모드를 추가하거나 할 수 있습니다 - 더의 setAttribute 생성자 또는 통해 모든 PDO 호출에 한 번 설정 (). 아래 PDO에 대해 표시되는 출력 :: 모드를 가져 기본값으로 FETCH_ASSOC 세트.

      1 => array (
        'name' => 'Solidfloor',
        'url' => 'solidfloor',
      ),
      2 => array (
        'name' => 'Quickstep',
        'url' => 'quickstep',
      ),
      4 => array (
        'name' => 'Cleanfloor',
        'url' => 'cleanfloor',
      ),
    )
    
  3. from https://stackoverflow.com/questions/12833979/using-value-of-a-column-as-index-in-results-using-pdo by cc-by-sa and MIT license