2012-07-01 36 views
13

Tôi nhận được thông báo lỗi sau trong CodeIgniter 2.1:Cập nhật Lỗi Database Dòng CodeIgniter

A PHP Error was encountered 

Severity: Notice 

Message: Array to string conversion 

Filename: database/DB_active_rec.php 

Line Number: 1407 

Tôi đang cố gắng để cập nhật các lĩnh vực trong cơ sở dữ liệu của tôi. Tôi có mã này và mọi hướng dẫn đều giống nhau để tải lên hàng loạt. Nó hoạt động anyway nhưng điều là nó hiển thị như một lỗi.

này những gì tôi có trong mô hình của tôi:

function update2($data){ 
    $this->db->update_batch('users',$data, "id"); 
} 

này những gì tôi có trong bộ điều khiển của tôi:

public function updateValues(){ 
    $this->load->model('get_db'); 
    $newRow = array(
     array(
      'id' => '3', 
      'firstname' => 'Rapphie' 
     ), 
     array(
      'id' => '2', 
      'firstname' => 'Charmie' 
     ) 
    ); 
    $this->get_db->update2($newRow); 
    echo "it has been updated"; 
} 
+0

Bạn đang chạy phiên bản CodeIgniter nào? Bạn có thể thấy điều đó với

+0

im sử dụng 2.1.2 phiên bản – Charmie

+0

Câu hỏi ngớ ngẩn, nhưng nếu bạn thực hiện print_r hoặc var_export ((dữ liệu)) ngay trên lệnh update_batch trong update2(), bạn có nhận được cùng một mảng mà bạn đã truyền vào không? –

Trả lời

-2

thử hy vọng này công việc của mình

function update2($data){ 
    foreach($data as $string_val){ 
    $this->db->update_batch('users',$string_val, "id"); 
    } 
} 

hoặc

function update2($data){ 
    foreach($data as $string_val){ 
    $this->db->update_batch('users',$string_val->first_name, "id"); 
    } 
} 
+0

uh một vòng lặp foreach ... cảm ơn! nó hoạt động ... – Charmie

+9

Làm việc nhưng đánh bại mục đích sử dụng update_batch no? – Bretticus

45

Chỉ cần tình cờ gặp vấn đề tương tự ở đây. May mắn thay, tôi đang sử dụng cùng một phiên bản CI. :)

Đúng là câu trả lời từ M_A_K giúp xóa "Thông báo", nhưng tôi không nghĩ đó là giải pháp phù hợp cho vấn đề. Vì vậy, tôi quyết định xem xét dòng trong DB_active_rec.php và tôi tin rằng điều này không là gì ngoài một lỗi nhỏ trong CI 2.1.2.

Đây là bản sửa lỗi của tôi. Tôi chỉ đơn giản là thay đổi mã gốc:

$not[] = $k.'-'.$v; 

vào đây:

$not[] = $k2.'-'.$v2; 

Voila! "Thông báo" không xuất hiện nữa. Chúng tôi có thể thấy rõ rằng dòng 1407 không có nghĩa là sử dụng $ k và $ v vì dòng 1407 nằm trong vòng lặp foreach lặp qua $ v dưới dạng $ k2 và $ v2.

Tôi hy vọng tôi sẽ làm cho bản thân mình rõ ràng.

+4

Điều này chỉ được khắc phục trong CI 2.1.4, phát hành ngày 8 tháng 7 năm 2013, cho bất kỳ ai vẫn đang sử dụng 2.1.3 và gặp sự cố này. – JonoCoetzee

+0

Tại sao không chỉ xóa những dòng này? $ không được sử dụng ở bất cứ đâu. Kiểm tra câu trả lời của tôi dưới đây. – Tool

2

Chỉ cần nhận ra rằng sử dụng foreach như M_A_K đề xuất thực sự đánh bại mục đích sử dụng hàm update_batch. Điều này là do bằng cách sử dụng foreach, chúng tôi thực sự đang thực hiện cập nhật đơn lẻ (không phải lô) cho mỗi phần tử mảng. Điều này không khác với việc sử dụng hàm cập nhật (đơn) trong CodeIgniter.

0

Tôi luôn cảm thấy hơi bẩn vì làm điều này nhưng bạn luôn có thể ngăn chặn lỗi cho một dòng mã đó!

function update2($data){ 
    @$this->db->update_batch('users',$data, "id"); 
} 

Tất nhiên điều đúng đắn phải làm là nâng cấp lên 2.1.3 (chưa được thử nghiệm hoặc nhìn vì vậy tôi sẽ giả định nó cố định.)

+0

Ok, không bao giờ. Chỉ cần có lỗi một lần nữa thử nghiệm (không chắc chắn lý do tại sao tôi không nhìn thấy nó ngày hôm qua.) Không cố định trong 2.1.3 rõ ràng. Tôi đang đi với sự đàn áp lỗi. ; - / – Bretticus

0

giải pháp đúng là để loại bỏ các nếp 1401-1404 từ DB_active_rec.php vì biến số $not không được sử dụng ở bất kỳ đâu.

Các vấn đề liên quan