2015-03-18 4 views
9

Мне нужно получить структуру таблиц моих таблиц базы данных. Я использую приведенный ниже код.Для получения полей требуется имя таблицы в качестве параметра

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 
    } 
} 

Я получаю базу данных Error

Для извлечения полей требуется имя таблицы в качестве параметра.

Примечание: Эта функция работает с некоторыми таблицами, но я получаю эту ошибку на нескольких других таблицах. Таблица я проверка на это «admin_user»

Update:

Я проверил field_data функции в файле DB_driver.php в системной папке/базы данных.

, когда я печать обратного объекта

т.е.
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

Вы уверены, что не используете заглавные буквы для имен таблиц? Имейте в виду, что это чувствительно к регистру. – CodeGodie

+0

Какая ошибка у вас? – CodeGodie

+0

tablename такое же, как и в функции. Я получаю ошибку БД: для получения полей требуется имя таблицы в качестве параметра. – Mohan

ответ

0

Сообщение об ошибке говорит, что вы пропустили.
Ваше $ tableName пуст, когда вы получили эту ошибку.
Вы можете посмотреть на system/database/DB_driver.php и посмотреть на field_data (линия 878 может быть). Вы получите это сообщение об ошибке, когда ваше $table (tablename) пусто.
Убедитесь, что имя вашей таблицы не пустое.

+0

в соответствии с @BadDeveloper, он уже использует это 'echo $ tableName;' для проверки строки, поэтому это может быть не преступник. – CodeGodie

+0

@CodeGodie Это сообщение об ошибке отображается только при установке пустого имени таблицы. В противном случае вывод OP должен быть 'THE_TABLE_NAME, а затем сообщение об ошибке '. Но оно не печатает имя таблицы, потому что имя_таблицы пуст. Если он повторит это «echo» abc -. $ TableName .'-xyz '; 'он поймет, что происходит. –

+0

хорошо он echo '$ tableName', так что он знает, имя таблицы не пусто. –

0

Попробуйте заменить код три файла по этой ссылке

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

файлы являются: -

системы/базы данных/драйвера/MySQL/mysql_result.php система

/database/drivers/mysqli/mysqli_result.php

user_guide_src/источник/изменение log.rst

+1

SO discurage ссылка только ответ. Также этот ответ не дает никаких причин, почему он должен заменить файлы и почему решит проблему. –

1

Я не знаю, почему вы не используете конфигурацию БД по умолчанию, вызвав

$this->db->field_data($tableName); 

вместо пользовательских переменных DB1, так как вы не изменить соединение, дБ или что-нибудь показано или mentioined в вопрос. Однако, следующий код будет работать как шарм:

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()); 
} 

Эти две функции немного отличаются в возвращенных результатов, так что вы должны проверить оба их и посмотреть, что лучше подходит для вашего кода (например, пользовательский дает дополнительное поле).

+0

Было бы справедливым, что могли бы объяснить нисходящие. – Tpojka

+0

Я согласен @Tpojka Я удалил свой ответ из-за того, что это было несправедливо, голосуя, объясняя почему – user4419336

+0

Этот ответ не объясняет, почему Op получил ошибку для некоторых таблиц, и «Я не уверен, почему вы не используете конфигурацию по умолчанию по умолчанию вызов «это следует задать в разделе комментариев не в ответ. –

1

Работайте отлично.

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

проверка! и убедитесь, что в таблице нет ключевого слова, используемого в качестве имени поля.

+0

Как вы уже не видели уже предложенного ответа? – Tpojka

+0

Я вижу, но вы не используете поле 'db-> по умолчанию', , если ваш метод работает с некоторыми таблицами, а не с admin_user, тогда ответ невозможен. I предложит вам также предоставить структуру таблицы admin_user. –

+0

Я использовал '$ this-> db-> field_data ($ tableName)', и вы перезаписали его с помощью '$ this-> db-> field_data ($ tableName)'? О чем ты говоришь? Пожалуйста, объясните или прочитайте мой ответ еще раз. – Tpojka

Смежные вопросы