2016-07-08 3 views
1

원격 MySQL 데이터베이스에 액세스하는 스크립트가 있습니다. 이 데이터베이스에는 40 억 개 이상의 (예, 10 억 개) 레코드가있는 여러 테이블이 있습니다.PHP 스크립트에서 테이블 데이터에 액세스 할 수 없습니다.

오늘 나는 약 630 만 개의 레코드로 새로운 테이블을 만들었습니다. Sequel Pro를 통해 데이터베이스와 더 구체적으로 새 테이블에 액세스하면 쿼리를 수행하고 데이터베이스의 모든 테이블에서 데이터를 가져올 수 있습니다. 여기에는 방금 만든 새 테이블에 액세스하는 것도 포함됩니다.

문제 : PHP를 통해 동일한 사용자 자격 증명을 사용하여 동일한 데이터베이스에 액세스 할 때 방금 만든 새 테이블에 액세스 할 수 없습니다. 필자는 데이터베이스의 다른 모든 테이블에있는 데이터에 액세스 할 수 있지만 작성한 새 테이블이 아닙니다.

다음은 내가 시도한 내용입니다.
먼저 PDO를 통해 연결 및 쿼리를 시도했습니다. 그 때 작동하지 않았다 mysqli와 연결 및 쿼리를 만들려고. 이 방법들도 효과가 없었습니다. 스크립트에서 뭔가를 놓치지 않았는지 확인하기 위해 데이터베이스의 모든 테이블 목록을 가져 와서 각 테이블에 액세스하여 2 개의 레코드를 가져 와서 화면에 출력하는 스크립트를 작성했습니다.

try { 
    $db = new PDO('mysql:host=IP_ADDRESS;port=PORT_NUMBER;dbname=DB_NAME', 'DB_USER', 'DB_PASSWORD', [ 
     PDO::ATTR_PERSISTENT => true 
    ]); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

$query = $db->query('SHOW TABLES'); 
$results = $query->fetchAll(PDO::FETCH_COLUMN); 

foreach ($results as $r) { 
    echo '<br><br>' . $r . '<br>'; 
    $res = $db->query("SELECT * FROM `" . $r . "` LIMIT 2"); 

    foreach ($res as $row) { 
     echo '<br>'; 
     print_r($row); 
    } 
} 

이 스크립트는 새 테이블을 제외한 모든 테이블에서 레코드를 검색 할 수 있습니다.

추가 정보 :
-이 원격으로 호스팅하는 Windows 10 시스템에서 MySQL 데이터베이스입니다.
- 사용자가 DB의 모든 테이블에 대한 전체 액세스 권한을가집니다.
- 기본 DB 옵션 인 encoding : utf8, collation : utf8_general_ci, 테이블 유형 : InnoDB
으로 테이블을 만들었습니다.이 테이블은 Sequel Pro에서 INSERT INTO TABLE_NAME SELECT ..... 문을 사용하여 만들었습니다.
- MAMP Pro를 사용하여 MacBook Pro로 DB에 액세스하고 있으며 기본 PHP 설정을 변경하지 않았습니다.

+3

오류를 확인하지 않습니다. PDO에서는 예외를 사용할 수 없으므로 실패시 부울 false를 반환하고 false 반환 값을 확인하지 않습니다. 즉, 모든 것이 완벽하게 작동하고 결코 실패하지 않는다고 생각하는 것입니다. 결코 성공을 가정하지 마십시오. 항상 실패로 가정하고, 실패를 확인하고, 성공을 즐거운 놀라움으로 대합니다. –

+0

@MarcB 오류 검사에 대한 제안을 해주셔서 감사합니다. 그러나 앞서 말씀 드렸듯이 PDO와 mysqli를 모두 사용해 보았습니다. 동일한 결과를 얻었습니다. 내 db하지만 모든 방금 만든 테이블에 액세스 할 수 있어요. 그리고 나는 그것을 게시하지는 않았지만 내가 사용했던 mysqli 코드에는 다음과 같은 에러 검사가 포함되어있다 :'($ mysqli-> connect_error) { die ('$ mysqli-> connect_errno.') ' $ mysqli -> connect_error); }이 경우 ' –

+1

연결 오류를 확인하는 것은 완전히 쓸모가 없습니다. 너는 연결 했어. 당신은 단지 query() 호출이 실패하지 않는다고 생각하고 있습니다. 차고 벽 뒤쪽으로 운전하는 것과 같습니다. "모든 것이 잘되고, 고속도로에서 아무것도 치지 않았습니다."라고 말합니다. 당신은 실패뿐만 아니라 연결에 대한 모든 db 쿼리 호출을 점검 할 필요가있다. –

답변

0

다른 사람에게 도움이된다면 놀랄 것입니다. 그러나 문제는 테이블에 다른 필드를 추가하는 것이 었습니다. Sequel Pro의 "Structure"인터페이스를 통해이 작업을 수행했습니다. 내 테이블에 640 만 개의 레코드가 있었기 때문에 필드를 추가하는 데 약간의 시간이 걸렸지 만 완료되면 PHP를 통해 테이블에 액세스 할 수있었습니다.

관련 문제