0

モジュール用の小さなインストール スクリプトを作成してみます。私が呼び出すと$_GET["install"]、スクリプトが実行されています。私はこのように見えます:

public function install()
{
  $this->sql->query("
    INSERT
    INTO    cms_modules (title)
    VALUES  ('Guestbook')
  ");

  $this->sql->query("
    CREATE TABLE IF NOT EXISTS `cms_guestbook` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  ");
}

それはかなりうまくいきます。テーブルがインストールされ、新しい行が に追加されますが、テーブルが存在しないcms_modules場合にのみ INSERT がアクティブになるようにしたいと思います。cms_guestbook

答えを探していて、このトピックを見つけました。WHERE NOT EXISTS次のようにして、それを使用してみます。

$this->sql->query("
  INSERT
  INTO    cms_modules (title)
  VALUES  ('Guestbook')
  WHERE NOT EXISTS (
          SELECT 1 FROM cms_guestbook
  )
");

しかし、これは私にはうまくいきませんでした。テーブルはインストールされていますが、行は挿入されていません。私も使ってみSHOW TABLES LIKEましたが、それもうまくいかないようでした。

誰かの提案や解決策はありますか?

4

1 に答える 1

1

次のようなことができます。

if(!$this->sql->query("SHOW TABLES LIKE 'cms_guestbook'")){
    $this->sql->query("
        INSERT
        INTO    cms_modules (title)
        VALUES  ('Guestbook')
      ");
}

特定のテーブルが見つかったかどうかを確認するためにクエリを実行し、false が返された場合 (ブール値を返すことを確認してください)、他のクエリを実行します。

于 2014-03-11T08:47:35.793 に答える