【问题标题】:PHP Create table if it does not exist [duplicate]PHP如果不存在则创建表[重复]
【发布时间】:2021-07-08 09:55:56
【问题描述】:

我有一个问题,我似乎真的无法解决或无法理解它为什么不起作用。我正在尝试使用给定的代码 [OOP] 创建一个数据库表:

我用它来连接我的数据库

public function __construct() {
    $this->$connection = new mysqli(host, user, password, table);
    $this->init_tables();
}

为了测试我的连接并保存连接对象,我使用这个:

public function get_connection(){

            if ($this->$connection->connect_errno) {
                return $this->$connection->connect_error;
            }
            else{
                return true;
            }

}

我使用我的 __construct 获取连接状态并将其保存到受保护的变量中,如下所示:

class DBHandler{

    protected $connection;

__construct 将 mysqli 对象保存到该变量中。它曾经工作过,但现在不起作用,我似乎看不到问题所在。 init_tables 是如果不存在则应该创建表的函数。这是那个函数:

public function init_tables(){
            
    if ($this->get_connection()) {


        /* Users
        -------------------------------------------------- */

        $table_users = $this->prefix.'users';
        $sql_users = "CREATE TABLE IF NOT EXISTS $table_users (
            id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
            username VARCHAR(30) NOT NULL,
            password VARCHAR(128) NOT NULL,
        )";

        $this->$connection->query($sql_users);



        /* Lists
        -------------------------------------------------- */

        $table_lists = $this->prefix.'lists';
        $sql_lists = "CREATE TABLE IF NOT EXISTS $table_lists (
            id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
            iOwnerID INT(6) NOT NULL,
            sListTitle VARCHAR(64) NOT NULL,
            bIsClosed tinyint(1),
        )";

        $this->$connection->query($sql_lists);



        /* Tasks
        -------------------------------------------------- */

        $table_tasks = $this->prefix.'tasks';
        $sql_tasks = "CREATE TABLE IF NOT EXISTS $table_tasks (
            id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
            iListID INT(6) NOT NULL,
            sTaskTitle VARCHAR(128) NOT NULL,
            bIsDone tinyint(1),
        )";

        $this->$connection->query($sql_tasks);
    }
}

我想添加一个评论,即第一个创建表之前工作过。这创造了桌子。我复制粘贴了该查询以创建所有 3 个。错误地,数字 2 和 3 表中的列有错误的列。因此,我登录了我的 phpmyadmin 并删除了表 2 和表 3。从那以后它就没有工作了。它会缓存一些东西吗?我确实通过在函数内部执行一些 prints() 来确保调用了该函数。它一直有效,没有问题。那么可能是什么问题呢?我的列有什么问题吗?

我是不是搞错了什么,还是我只是瞎了眼? 提前致谢。在此过程中,我会尝试寻找解决方案。

【问题讨论】:

  • 你的PHP错误日志有什么要说的吗?
  • @RiggsFolly 我的错,忘了包括那个。我会把它添加到帖子中。
  • @El_Vanja Havent 检查了它们,因为我不知道日志的位置。我会试着找到他们。
  • 当然if ($this->$connection->connect_errno) { 只有在有错误>0 时才会为真,所以这个方法有点混乱
  • 你有没有打开错误显示,再试一次看看PHP会不会报什么?

标签: php mysql datatables


【解决方案1】:

我不知道sql查询最后不允许逗号。

错误:

$sql_users = "CREATE TABLE IF NOT EXISTS $table_users (
                    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
                    username VARCHAR(30) NOT NULL,
                    password VARCHAR(128) NOT NULL,
                )";

正确:

$sql_users = "CREATE TABLE IF NOT EXISTS $table_users (
                    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
                    username VARCHAR(30) NOT NULL,
                    password VARCHAR(128) NOT NULL
                )";

【讨论】:

  • 请选择您的答案作为答案,这样问题已得到回答就显而易见了。谢谢。
猜你喜欢
  • 2019-09-09
  • 2013-05-09
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 2010-12-03
  • 2014-12-10
  • 2013-05-26
相关资源
最近更新 更多