2016-07-08 8 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オプション(エンコード:utf8、照合: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コードには、このエラーチェックが含まれていました。 - > connect_error); } ' –

+1

この場合、接続エラーのチェックはまったく役に立たない。あなたは接続しました。あなたは単にquery()呼び出しが失敗することはないと思います。それはあなたのガレージの壁の後ろに運転するようなもので、「すべてがうまくいけば、私は高速道路で何も打つことはありませんでした」と言っています。接続だけでなく、すべてのdb query callで障害をチェックする必要があります。 –

答えて

0

これが他の誰にも役立ちますと、私は驚いています。しかし、私の問題を解決したことは、テーブルに別のフィールドを追加することでした。 Sequel Proの "Structure"インターフェースでこれを行いました。私のテーブルには640万のレコードがあったので、フィールドを追加するのに少し時間がかかりましたが、完成したら問題なくPHP経由でテーブルにアクセスできました。

関連する問題