私はリモートの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設定を変更していません。
あなたはエラーをチェックしていません。 PDOでは例外が有効になっていないため、失敗した場合はブール値falseを返し、falseの戻り値はチェックしていません。つまり、すべてが完璧に動作し、決して失敗しないと思っているだけです。決して決して成功するとは思わない。常に失敗とみなし、失敗をチェックし、成功を楽しい驚きとして扱います。 –
@MarcBエラーチェックの提案をありがとうございましたが、前に述べたように、私はPDOとmysqliの両方でこれを試してみて、同じ結果を得ました。私はdb内のすべてのテーブルにアクセスできますが、作成したテーブルはすべてアクセスできます。私が使ったmysqliコードには、このエラーチェックが含まれていました。 - > connect_error); } ' –
この場合、接続エラーのチェックはまったく役に立たない。あなたは接続しました。あなたは単にquery()呼び出しが失敗することはないと思います。それはあなたのガレージの壁の後ろに運転するようなもので、「すべてがうまくいけば、私は高速道路で何も打つことはありませんでした」と言っています。接続だけでなく、すべてのdb query callで障害をチェックする必要があります。 –