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,尽管我希望仅在该cms_guestbook存在时才激活 INSERT。

我搜索了一个答案并找到了这个主题。我将尝试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 回答