我有一个问题,我似乎真的无法解决,也不知道为什么它不起作用。我正在尝试使用给定的代码 [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() 来确保正在调用该函数。它一直工作没有问题。那么可能是什么问题呢?我的专栏有什么问题吗?
我是不是搞砸了什么,还是我瞎了眼? 提前致谢。在这一切结束时,我会尝试寻找解决方案。
答案 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
)";