我正在为我的网站制作一个投票插件,我想创建2个表:一个存储投票的表,另一个存储选民IPS。

在Codex中,建议使用IF语句查看安装插件时是否已经创建了表格,但是如果要创建2个表,我该如何更改代码?

这是我在插件安装函数中的IF语句,当前设置为检查是否已经存在1个表。

...

   $table_name1 = $wpdb->prefix . "voters_ip";
   $table_name2 = $wpdb->prefix . "vote_posts";
   $installed_ver = get_option( "postvote_version" );  

   if($wpdb->get_var("show tables like '$table_name'") != $table_name1) { //unsure how to add both tables

      $sql = "CREATE TABLE " . $table_name1 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      voter_ip varchar(100) NOT NULL,
      UNIQUE KEY id (id)
    );";

      $sql = "CREATE TABLE " . $table_name2 . " (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      vote_post_id bigint(20) NOT NULL,
      up int(11) NOT NULL,
      ddown int(11) NOT NULL,
      UNIQUE KEY id (id)
    );";

      require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
      dbDelta($sql);

      add_option("postvote_version", $postvote_version);
   }

....

检查两个表是否存在的正确方法是什么?

有帮助吗?

解决方案

在构建插件之前,您应该学到的基本编程技术:

  1. 您可以与&&(and)和||的串联检查(或者)。
  2. 你可以(并且应该)每个人 CREATE 用自己的支票查询

您应该在自己编写查询之前应该研究的SQL语法:

相关说明,请确保您在插件时删除这些表 卸载/删除.

PS:没有犯罪,但是 看起来像您复制粘贴而不知道代码的作用。请注意,通过在插件中执行此操作,您会冒险使用其他人的装置!

其他提示

我只看了您的代码,但您至少有三个问题。

第一个是与安全有关的:

CREATE TABLE " . $table_name1 . "

您永远不知道您的功能可能会收到什么样的垃圾,所以最好像这样写:

CREATE TABLE `" . str_replace('`', '', $table_name1) . "`

第二个是与SQL相关的,并且已经突出显示:

CREATE TABLE

应该:

CREATE TABLE IF NOT EXISTS

最后也是最重要的是与PHP语法相关。第二个电话:

$sql =

应该:

$sql .=

否则您将永远不会创建第一张表。曾经。

最后,正如上一条消息中指出的那样,可以选择存储插件或表格的版本是一个很好的做法。当它自己的选项及其模式变化时,这可以更轻松地升级。

如果您使用的是唯一的表名称,则可以在相当多的信心中假设表2存在表2。因此,我只会检查1的存在,如果在那里,请跳过脚本...如果不是,请运行脚本。

您还可以关注您为插件设置的选项:

  • 如果存在该选项(即 get_option('my-voting-version'))然后,安装了插件,您无需运行数据库脚本。
  • 如果该选项不存在,请运行您的脚本并设置该选项,以免运行两次。

即使删除了插件,该选项也将保留,因此当重新激活时,您将不会重新编写表。存储数据库版本并基于该脚本运行脚本,还为您提供了管理升级的功能。然后,您可以根据先前为网站存在的表版本选择性地运行升级脚本。

许可以下: CC-BY-SA归因
scroll top