0

ID、コンテンツ、日付、タイトルの列を持つテーブル (メール) を持つ MySQL データベースがあります。テーブルが存在するかどうかを確認するオプションがあるかどうかを知りたいです。たとえば、列を追加する場合は、テーブルを変更します。これに対して私が見つけた唯一の可能な解決策は、次のようなものでした:

$sql=mysql_query(
        "SELECT something FROM Mail");

if (!$sql){

mysql_query("ALTER TABLE Mail ADD Test VARCHAR(150) DEFAULT NULL");

}ELSE{

mysql_query("CREATE TABLE if not exists `Mail` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Content` longtext,
`Datum` varchar(15) DEFAULT NULL,
`Titel` varchar(150) DEFAULT NULL,
`Test` varchar(150) DEFAULT NULL,

PRIMARY KEY (`ID`)
) ");

}

だから、これを行うためのより簡単な方法があるかどうかを知りたいのですが、おそらく1つのクエリでも(おそらくそうではありません)?誰かがこれを行うためのより良い/簡単な方法を知っていれば、それは素晴らしいことです!

そして、Mysql_ が非推奨であることは知っていますが、すぐに PDO に切り替えます!

4

2 に答える 2

2

存在しないテーブルを ALTER しようとすると、エラーが発生します。これで十分です:

$res = mysql_query('ALTER TABLE Mail...');
if (!res) {
    mysql_query('CREATE TABLE Mail...');
}

または、さらにハックすることもできます。

mysql_query('CREATE TABLE Mail IF NOT EXISTS...'); // does nothing if table already exists
mysql_query('ALTER TABLE Mail ADD Test...'); // does nothing if the column already exists

このコードが非常に悪臭を放っていることは言うまでもありません。ロジックの大幅な作り直しをお勧めしない唯一の状況は、これが自動化されたインストール/アップグレード手順にのみ関連している場合です。

于 2013-06-07T09:37:14.700 に答える
0

これには見苦しいハックがあり、非常にうまく機能します

  • スクリプトを作成します。
    • CREATE TABLE IF NOT EXISTS ...ものをします
    • 結果のエラーALTER TABLE ...無視して処理を行います
    • して自殺するfile_put_contents(__FILE__,'');
  • それを含めます

最初の実行では、実行する必要があることを実行し、その後の実行では空のファイルを含めます。IF NOT EXISTS条件が真になるのは一度だけで、失敗するだけなので、最初の同時実行でも問題ありALTER TABLEません。

これにより、テーブルがないか、テーブルの間違ったバージョンから目的のバージョンへの醜いが機能するパスが提供されます。

于 2013-06-07T09:36:46.370 に答える