要获取字段,需要将表的名称作为参数

时间:2015-03-18 15:12:18

标签: php codeigniter

我需要获取数据库表的表结构。所以我使用以下代码。

class Some_model extends CI_Model{

    public $DB1;
    function __construct(){
        parent::__construct();
        $this->DB1 = $this->load->database('default',TRUE);
    }

    function getTableStructure($tableName){
        echo $tableName;     //this Outputs my table Name that i pass in the function
        return $this->DB1->field_data($tableName) ;   //this gives error for some tables
    }
}

我收到数据库错误

要获取字段,需要将表名作为参数。

注意:此函数适用于某些表,但我在其他几个表上遇到此错误。我正在检查的表是" admin_user"

更新:

我检查了system / database文件夹中DB_driver.php文件中的field_data函数。

当我打印退货对象时,即

echo "<pre">;print_r($query->field_data());die();
//return $query->field_data();   commented this line print's the object

然而,

//echo "<pre">;print_r($query->field_data());die();  comment this line shows error. 
return $query->field_data();

4 个答案:

答案 0 :(得分:1)

我不确定为什么不通过调用

来使用默认数据库配置
$this->db->field_data($tableName);

而不是自定义变量DB1,因为您不会更改连接,数据库或任何显示或有问题的任何内容。 但是,下一个代码就像魅力一样:

public function desc1($tableName)
{
    $fields = $this->db->field_data($tableName);
    var_dump($fields);
}

甚至可以使用自定义查询,如:

public function desc2($tableName)
{
    $fields = $this->db->query("DESCRIBE `" . $tableName . "`");
    var_dump($fields->result());
}

这两个函数在返回的结果中略有不同,因此您必须检查它们并查看哪个更适合您的代码(即自定义的代码也会提供额外的字段)。

答案 1 :(得分:1)

适合我。

function getTableStructure($tableName){
  if(isset($tableName)){
     return $this->db->field_data($tableName) ;
     }
 }

检查!并确保表中没有用作字段名称的关键字。

答案 2 :(得分:0)

错误消息显示您错过了什么 当你遇到这个错误时,你的$ tableName是空的 您可以查看system/database/DB_driver.php并查看field_data(可能是878行)功能。当$table(表名)为空时,您会收到该错误消息 确保您的表名不为空。

答案 3 :(得分:0)

尝试使用此链接替换您的三个文件代码

https://github.com/bcit-ci/CodeIgniter/commit/effd0133b3fa805e21ec934196e8e7d75608ba00

文件是: -

  

系统/数据库/驱动程序/ MySQL的/ mysql_result.php

     

系统/数据库/驱动器/库MySQLi / mysqli_result.php

     

user_guide_src /源极/ changelog.rst