1

DB real と backDB の 2 つがあります。SQL を使用して、あるものから別のものにすべてをコピーしたいのですが、それほど簡単ではないようです。誰かが私を助けることができれば。これが私のコードです:

$newdbsql="CREATE TABLE $newdb LIKE $actdbname.`$acttable`";
$newresult = mysql_query($newdbsql, $bckconn) or die(mysql_error());

// copy all the data
$query = "INSERT INTO $newdb SELECT * FROM $actdbname.$acttable WHERE $acttable.azon < $upto";
$result = mysql_query($query, $bckconn) or die(mysql_error());

私はそれと戦ってきましたが、正しく理解できません...ありがとう

更新:両方の DB に接続でき、単純な選択もできます。しかし、A から読み取り、BackupDb にコピーする場合は、常に 1 つの DB にのみ接続します。

エラー メッセージ: 実 DB の「バックアップ」ユーザーに対する SELECT コマンドが拒否されました...

重要な情報: 私は共有ホストにいるので、それほど簡単ではありません:)

4

2 に答える 2

2

SELECT通常のデータベースへのアクセス許可をバックアップ データベース ユーザーに付与するだけです。

GRANT SELECT ON `$actdbname`.* TO `backup`@`localhost`;

SELECT他のアクセス許可は必要ないため、最適なセキュリティのために、 以外のものを付与することはお勧めしません。

于 2012-08-05T15:16:19.547 に答える
1

警告:

mysql_*関数を使用して新しいコードを記述しないでください。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが表示されますか?

代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。この記事では、使用するAPIの決定について詳しく説明します。PDOの場合、ここに優れたチュートリアルがあります。

MySQLの内部レプリケーション機能を使用せずにデータベースをレプリケートするには、CREATE TABLE foo LIKE bar;andINSERT INTO foo SELECT * FROM bar;ステートメントを使用できます。

foo最初の行は、元の構造とまったく同じ構造を使用して名前が付けられた新しいテーブルを作成し、2番目の行は、の内容bar全体をにコピーするのに役立ちます。barfoo

編集:

テーブル名は、現在のデータベースfooのテーブルを意味すると言うことができます。fooしかし、あなたは言うことができます、それはあなたのデータベースのテーブルbaz.fooを意味します。もちろん、ユーザーは両方のデータベースで必要な特権を持っている必要があります。次のコードが機能します。foobaz

mysql_connect("localhost", "username", "password");
mysql_select_db("original");

mysql_query("CREATE TABLE backup.foo LIKE original.bar");
mysql_query("INSERT INTO backup.foo SELECT * FROM original.bar");

mysql_close();
于 2012-08-05T15:27:39.410 に答える