我开始使用 codeigniter 2.1.0 编写一个简单的模型类。我现在想要它做的就是创建和删除它所代表的 MySQL 表。这是代码:
<?php
class Users_model extends CI_Model {
public function createTable(){
if( $this->db->table_exists('users') == FALSE ){
$query = "CREATE TABLE users(
id SERIAL PRIMARY KEY,
email VARCHAR(52) NOT NULL check(email <> ''),
UNIQUE (email)
)ENGINE = InnoDB;";
$this->db->query($query);
}
}
public function deleteTable(){
if( $this->db->table_exists('users') ){
$query = "DROP TABLE users;";
$this->db->query($query);
} else {
echo "users not found <br />";
$tables = $this->db->list_tables();
foreach ($tables as $table)
{
echo $table."<br />";
}
}
}
}
?>
这是我在主类中执行的代码:
$this->load->model('users_model');
$this->users_model->deleteTable();
$this->users_model->createTable();
第一次运行很好而且花花公子。表格创建得很好。但是,当我再次运行它时,我得到输出:
users not found
users
经过进一步检查我意识到table_exists()
一去不复返TRUE
. var_dump($this->db->table_exists('users'));
回报bool(false)
.
那么,我做错了什么吗?这个很简单,直接复制粘贴即可文档 http://codeigniter.com/user_guide/database/table_data.html。 Google 不会返回任何相关内容,作为一名 C 程序员,我的心态始终是“如果有错误,那就是你的错误。(理查德·斯托曼永远不会错)”……但由于斯托曼先生与此无关,因此一个潜在可能。
TL;DR
为什么table_exists('users')
上面的代码永远不会返回TRUE
即使list_tables()
确实返回“用户”;
尝试使用var_dump()
代替echo
。布尔值不能很好地工作echo
.
var_dump( $this->db->table_exists('users') );
The 源代码 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_driver.php#L829 of table_exists
看起来像这样:
function table_exists($table_name)
{
return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE;
}
Update来自评论
如果你看一下_保护_标识符 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_driver.php#L1351它确实将数据库名称添加到表名称中。但应该有一个 .之间db.table
。也许你的数据库配置搞砸了?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)