2013-04-10 5 views
7

Я новичок в CodeIgniter, я пытался прочитать документацию по CI, но я все еще не могу решить свою проблему, может быть, кто-то здесь может помочь исправить мою проблему , Вот мой код:Ошибка: объект класса CI_DB_mysql_result не может быть преобразован в строку

В моем контроллере

class Registration extends CI_Controller{ 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('registration_model','rmod'); 
    } 

    function ambil() { 

     $gender = $this->input->post('kelamin'); 

     $tinggi = $this->input->post('height'); 

     $berat = $this->input->post('weight'); 

     $weight = $this->rmod->ambilBeratPria($tinggi); 

     echo $weight; 
    } 

В моей модели

function ambilBeratPria($tinggi) { 

    $this->db->select('berat')->from('pria')->where('tinggi',$tinggi); 

    $query = $this->db->get(); 

    return $query;   
} 

Я хочу, чтобы получить результат моего запроса в модели, но я получаю сообщение об ошибке, как это:

Message: Object of class CI_DB_mysql_result could not be converted to string

Может быть, кто-то здесь может помочь решить мою проблему? Спасибо.

ответ

8

Вы должны вернуть результат запроса:

function ambilBeratPria($tinggi) { 

    $this->db->select('berat')->from('pria')->where('tinggi',$tinggi); 

    $query = $this->db->get(); 

    return $query->result(); 

} 

EDIT:

Если результат один ряд:

function ambilBeratPria($tinggi) { 

    $this->db->select('berat')->from('pria')->where('tinggi',$tinggi); 

    $query = $this->db->get(); 

    if ($query->num_rows() > 0) { 
     return $query->row()->berat; 
    } 
    return false; 
} 
+0

спасибо за ваш ответ ^^ Я пробовал этот путь. возврат не является результатом запроса, но только текст «массив» вышел, когда я запустил код ... Возможно, я ошибся в коде контроллера? –

+0

См. Мой отредактированный ответ. –

+0

когда я пытаюсь, я получил ошибку, подобную этой «Попытка получить свойство не-объекта» Возможно, мой код по-прежнему не так? ^^ –

2

В настоящее время вы пытаетесь напрямую эхо значение, возвращаемое $this->db->get();. Однако, чтобы использовать результат (ов) из запроса, вам нужно generate the results.

При создании запроса, как это:

$query = $this->db->get(); 

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


result() - Позволяет использовать результаты как массив объектов.

if ($query->num_rows() > 0) //Ensure that there is at least one result 
{ 
    foreach ($query->result() as $row) //Iterate through results 
    { 
     echo $row->weight; 
    } 
} 

result_array() - Позволяет использовать результаты в качестве массива.

if ($query->num_rows() > 0) //Ensure that there is at least one result 
{  
    foreach ($query->result_array() as $row) //Iterate through results 
    { 
     echo $row['weight']; 
    } 
} 

row() - Если вы ждете только один результат, то это может быть полезно. Если запрос генерирует несколько результатов, возвращается только первая строка . Позволяет использовать результат как объект .

if ($query->num_rows() > 0) 
{ 
    $row = $query->row(); 
    echo $row->weight; 
} 

row_array() - То же самое, как row(), но позволяет использовать результат в качестве массива.

if ($query->num_rows() > 0) 
{ 
    $row = $query->row_array(); 
    echo $row['weight']; 
} 
+0

Большое спасибо за объяснение, я действительно очень ценю это! ^^ это сработало ^^ –

+0

Не беспокойтесь, я рад, что это помогло. – jleft

1

Я получил ту же ошибку, когда я работал в PHP проекта с кодом воспламенитель framework.In там в моем классе модели был метод, называемый getprojectnames(),

public function getprojectnames(){ 

            $result['names']=array(); 
            $this->db->select('name'); 
            $this->db->from('project'); 
            $this->db->where('status','Not Completed'); 
            $query=$this->db->get(); 
            return $query->result(); 
            } 

Я хотел вызовите эту функцию в классе контроллера и используйте ее в выпадающем списке в классе представления.

Так что в моем классе контроллера,

$this->data['projects'] =$this->testcase_model->getprojectnames(); 
    $this->load->view("admin/_layout_main",$this->data); 

На мой взгляд, класс,

<?php echo form_open('admin/check1'); ?> 
    <div class="row" style=" margin-left: 10px; margin-top: 15px;"> 
     <h5 class="box-title">Projects List &nbsp;&nbsp;&nbsp; : &nbsp; <?    php echo form_dropdown('projects', $projects, 'id'); ?> </h5> 
     <div> 
      <input type="submit" style="width:200px;" class="btn btn-block btn-primary" value="Show Project TestCase Status" /></div> 
    </div> 
    <?php echo form_close();?> 

Когда я запускаю это я получил ошибку, говоря CI_DB_mysql_result не удалось преобразовать в String.So я решил эту проблему проблема, изменив мой код в классе модели, например,

public function getprojectnames(){ 

            $result['names']=array(); 
            $this->db->select('name'); 
            $this->db->from('project'); 
            $this->db->where('status','Not Completed'); 
            $query=$this->db->get(); 

            foreach ($query->result() as $row) 
             { 
              array_push($result,$row->name); 
             } 
            return $result; 

             } 

Тогда моя программа w хорошенький.

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