php-table_exists()方法可能无法正常工作

我开始使用codeigniter 2.1.0编写一个简单的Model类.我现在想要它做的就是创建并删除它代表的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).

所以,我做错什么了吗?这很简单,从documentation复制粘贴.Google不返回任何相关内容,作为C程序员,我的心态始终是“如果有错误,那就是你的错误.(Richard Stallman永远不会错)”.但是,由于斯托曼先生与此无关,所以有可能.

TL; DR

为什么上面的代码中的table_exists(‘users’)永远不会返回TRUE,即使list_tables()确实返回了’users’;

解决方法:

尝试使用var_dump()代替echo.布尔值不适用于echo.

var_dump( $this->db->table_exists('users') );

table_exists的source code看起来像这样:

function table_exists($table_name)
{
    return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE;
}

来自评论的更新

如果您查看_protect_identifiers,则会将数据库名称添加到表名称中.但是应该有一个. db.table之间.也许您的数据库配置搞砸了?

上一篇:PHP-mysql左连接需要太长时间


下一篇:php-如何使CodeIgniter的探查器和Ajax请求发挥出色