我将尝试为我的模块创建一个小的安装脚本。
当我呼叫$_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添加了新行。

我搜索了答案并找到了this主题。我将通过以下操作尝试使用该WHERE NOT EXISTS

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


但这对我没有用。该表已安装,但未插入行。我也尝试使用SHOW TABLES LIKE,但这似乎也没有用。

任何人的建议或解决方案?

最佳答案

您可以执行以下操作:

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


您查询以查看是否找到了特定的表,并且是否返回false(请检查以确保它返回布尔值),然后运行其他查询。

关于mysql - 如果表不存在,则插入MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22320254/

10-13 01:37