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

Php 要获取字段,需要将表的名称作为参数,php,codeigniter,Php,Codeigniter,我需要获取数据库表的表结构。所以我使用下面的代码 class Some_model extends CI_Model{ public $DB1; function __construct(){ parent::__construct(); $this->DB1 = $this->load->database('default',TRUE); } function getTableStructure($table

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

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
    }
}
我得到一个数据库错误

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

注意:此函数适用于某些表,但我在少数其他表中遇到此错误。我检查的表是“管理员用户”

更新:

我已经检查了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”错误消息会显示您错过的内容。
出现该错误时,$tableName为空。
您可以查看
system/database/DB_driver.php
field_data
(第878行可能是)函数。当
$table
(tablename)为空时,您会收到该错误消息。

确保表名不为空。

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

档案包括:-

system/database/drivers/mysql/mysql_result.php

system/database/drivers/mysqli/mysqli_result.php

用户指南\u src/source/changelog.rst


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

public function desc2($tableName)
{
    $fields = $this->db->query("DESCRIBE `" . $tableName . "`");
    var_dump($fields->result());
}
而是自定义变量DB1,因为您不更改连接、db或任何有疑问的显示或定义。 但是,下一个代码将像一个符咒一样工作:

function getTableStructure($tableName){
  if(isset($tableName)){
     return $this->db->field_data($tableName) ;
     }
 }
甚至可以使用自定义查询,如:

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

对我来说效果很好


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

是否确保表名不使用大写字母?请记住这是区分大小写的错误会出现什么错误?tablename与函数中传递的相同。我遇到一个DB错误:获取字段需要表名作为参数。您说this:“这会给某些表带来错误”对于出现错误的表,能否提供正在使用的表名字符串?表名为“admin\u user”“根据@BadDeveloper,他已经在使用这个
echo$tableName
测试字符串,所以这可能不是罪魁祸首。@CodeGodie该错误消息仅在设置空表名时显示。否则,OP的输出应该是
表格名称,然后是错误消息
。但它不会打印表名,因为tablename为空。如果他像这样回显
回显'abc-'。$tableName.-xyz'他会明白发生了什么。他回显了
$tableName
,所以他知道,表名不是空的。@AbdulManan你检查了CI库了吗?为什么会显示错误消息?你应该先看看。对于OPs,除非我们看到他的db和代码,否则很难重现错误。他应该调试它。我明白了,但是您没有使用默认的
db->field
,如果您的方法对某些表有效,而对admin\u用户无效,则无法回答。我建议您也提供admin\u用户表结构。我使用了
$this->db->field\u data($tableName)
,您用
$this->db->field\u data($tableName)
重写了它?你在说什么?请解释一下,或者再读一遍我的答案。你的答案和我的答案之间存在着明显的差异,我也对你的答案投了赞成票。但问题是,他说获取字段需要表名作为参数。因此需要
isset($tableName)
,我添加了。OP问他为什么会在某些表中出现这个错误(
获取字段需要表名作为参数。
),这个答案没有提供任何理由,而是说它对我有效。这应该是注释
check!并确保表中没有用作字段名的关键字。
我同意@Tpojka我删除了我的答案,因为这是不公平的投票,没有说出原因。该答案不能解释为什么Op在某些表中出现错误,
我不确定您为什么不通过调用
使用默认数据库配置,这应该在评论中询问部分不在回答中。他指出的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());
}
function getTableStructure($tableName){
  if(isset($tableName)){
     return $this->db->field_data($tableName) ;
     }
 }