0

ディレクトリを解析し、特定のデータベース内のテーブルとしてサブディレクトリ名が存在するかどうかをチェックする SQL ステートメントを生成し、ディレクトリに存在しないものに対して DROP TABLE ステートメントを生成する php コードがあります。

ディレクトリは、$DIR のコードで以前に呼び出されます。

$directories = glob($DIR . '/*' , GLOB_ONLYDIR);
$dir2 = str_replace( "$DIR/"  , ""  , $directories);
$dirlist = implode("', '",$dir2);
$sql = "SELECT CONCAT('DROP TABLE ', table_name, ';') FROM information_schema.TABLES WHERE table_schema = 'streamer1' AND table_name NOT IN ('$dirlist');";
echo "$sql";

これにより、ブラウザ ウィンドウに SQL ステートメントが生成されます。mysql を使用して sql ステートメントを手動で実行すると、フォルダー内のサブディレクトリ名として見つからないテーブル名に必要な DROP TABLE ステートメントのリストが取得されます。

+----------------------------------------+
| CONCAT('DROP TABLE ', table_name, ';') |
+----------------------------------------+
| DROP TABLE jhtest;                     |
+----------------------------------------+
1 row in set (0.00 sec)

私が達成したいのは、これらの結果を取得し、php コードを使用して mysql で実行することです。私は現在、結果をphpで返し、それぞれをmysqlステートメントとして実行するところに行き詰まっています。

これは、これらのドロップ ステートメントを生成する適切な方法ですか、それとも、提供されたリストにない場合 (CONCAT を使用してドロップ ステートメントを生成するよりも)、SQL ステートメントを編集してそれらのテーブルをドロップする簡単な方法はありますか?

4

2 に答える 2

0

まず、DB に接続してクエリを実行する必要があります。ループ内で drop ステートメントが実行されます。

$con = mysql_connect("host","username","password");
mysql_select_db("information_schema", $con) or die(mysql_error());
$sql = "SELECT CONCAT('DROP TABLE ', table_name, ';') as q FROM information_schema.TABLES WHERE table_schema = 'streamer1' AND table_name NOT IN ('$dirlist');";

//run the query
$res = mysql_query($sql);
if(!$res){
  die(mysql_error());
} else {
  while($row = mysql_fetch_array($res)){
    echo $row['q']."\n"; //output the queries or run the drop statements like this
    mysql_query($row['q']);
  }
}
于 2013-08-21T14:58:48.717 に答える