PHP 如果表不存在则创建表

时间:2021-04-13 10:39:56

标签: php mysql datatables

我有一个问题,我似乎真的无法解决,也不知道为什么它不起作用。我正在尝试使用给定的代码 [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() 来确保正在调用该函数。它一直工作没有问题。那么可能是什么问题呢?我的专栏有什么问题吗?

我是不是搞砸了什么,还是我瞎了眼? 提前致谢。在这一切结束时,我会尝试寻找解决方案。

1 个答案:

答案 0 :(得分: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
                )";