我需要获取数据库表的表结构。所以我使用以下代码。
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();
答案 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