2013-04-20 33 views
6

tôi đang cố gắng để kiểm tra xem một id trong cơ sở dữ liệu đã tồn tại và nếu nó không thì chỉ chèn rằng id và không phải là những khác mà tồn tạiLàm thế nào để kiểm tra xem id đã tồn tại - CodeIgniter

tôi đã cố gắng làm một nơi tuyên bố rằng sẽ kiểm tra nếu họ là một id tồn tại trong cơ sở dữ liệu nhưng ngay cả khi họ là những thông tin mới nó không chèn nó vào cơ sở dữ liệu

Im khá mất ở đây bất kỳ hướng dẫn sẽ được đánh giá

ps i không muốn cập nhật một hàng tôi muốn chèn một cập nhật mới mà không tồn tại

$this->db->where('id',$id); 
$q = $this->db->get('testing'); 

if($q) 
{ 
    //Do nothing 
} 
else 
{ 

    $this->db->set('id', $id); 
    $this->db->set('message', $message); 
    $query= $this->db->insert('testing'); 

} 
+0

Bạn đã kiểm tra xem '$ q' là gì khi bạn đang chạy ứng dụng này? – matthewpavkov

+0

$ q kiểm tra xem có bất kỳ id nào tồn tại trong db nó hoạt động không vì nó không chèn bất kỳ thông tin mới nào vào cơ sở dữ liệu – Hashey100

+0

Phải, nhưng tôi sẽ xác minh rằng $ q thực sự là 'false'. Hãy thử 'if ($ q-> num_rows()> 0) {...}' và sau đó chỉ cần thực hiện một 'echo' trong' if' của bạn để bạn có thể thấy điều gì đang xảy ra chắc chắn. – matthewpavkov

Trả lời

9

Mẫu

<?php 
class Fruits_model extends CI_Model 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     $this->load->database(); 
    } 

    function check() 
    { 
     $query = null; //emptying in case 

     $id = $_POST['id']; //getting from post value 
     $name = $_POST['name']; 

     $query = $this->db->get_where('fruits', array(//making selection 
      'id' => $id 
     )); 

     $count = $query->num_rows(); //counting result from query 

     if ($count === 0) { 
      $data = array(
       'name' => $name, 
       'id' => $id 
      ); 
      $this->db->insert('fruits', $data); 
     } 
    } 
} 

?> 
+2

Đối với điều này, bạn luôn có thể sử dụng quy tắc xác thực biểu mẫu is_unique [table.filed_name] để kiểm tra các giá trị duy nhất – MSN

1

Bạn cần chọn id trong bảng MYSQL có id bạn muốn kiểm tra và sau đó đếm các hàng. Nếu số hàng là 0 thì id không tồn tại.

 $query = mysql_query("SELECT * FROM  your_table WHERE id='$id'"); 
    $count = mysql_num_rows($query); 
    If($count!=0){ 
    // id exists 
    } else { 
    // id doesn't exist 
    } 
1

thường trường 'id' được thiết lập với auto_increment và thiết lập chính mà là duy nhất và không thể lặp lại. Vì vậy, không có vấn đề gì phải lo lắng về hiện tại.

Tuy nhiên, trong trường hợp của bạn, tôi nghĩ bạn không sử dụng nó làm 'trường duy nhất'.

Hãy để tôi cung cấp cho bạn một ví dụ.

Ở đây tôi có một tên bảng 'quả'

++++++++++++++++++++++++++++++++++++ 
ငfruit_id | int (primary) 
name  | text 
id  | int 
++++++++++++++++++++++++++++++++++++++ 

trong mô hình của bạn

function checkId($id) 
{ 
    $query=$this->db->get_where('fruits',array('id'=>$id)); //check if 'id' field is existed or not 

    if($query!=null) // id found stop 
    { 
    return FALSE; 
    } 
    else // id not found continue.. 
    { 
     $data = array(
      'fruit_id' => $fruit_id , 
       'name' => $name , 
      'id' => $id 
     );  
     $this->db->insert('fruits', $data);   
    }  
} 
+0

$ fruit_id, $ name, $ id được đăng các giá trị từ biểu mẫu của bạn –

+0

tôi đã thử mã của bạn nhưng nó trả về tất cả các kết quả sai ngay cả khi họ là một id mới – Hashey100

+0

okay có nó làm việc bạn phải sử dụng | num_rows(); kiểm tra câu trả lời tiếp theo của tôi cho giải pháp hoàn chỉnh –

3
$ql = $this->db->select('id')->from('testing')->where('id',$id)->get(); 

if($ql->num_rows() > 0) {} else { 
    $a = array('id' => $id, 'message' => $message); 
    $this->db->insert('testing', $a); 
} 

này nên làm điều đó.

3

Bạn có vấn đề về logic với mã mà bạn cần sửa.

Trong mã của bạn, bạn lưu kết quả từ truy vấn của mình là $q = $this->db->get('testing'), và $q sẽ luôn được đánh giá là true bất kể số hàng trả về của bạn.

Bạn cần kiểm tra số hàng bằng cách sử dụng $query->num_rows() > 0 và sau đó phần còn lại mã của bạn sẽ hoạt động như bạn mong đợi.

Để biết thêm chi tiết, xem: http://ellislab.com/codeigniter/user-guide/database/results.html

0

Đối với Kiểm tra Một Id Hoặc bất kỳ giá trị cột tồn tại không trong cơ sở dữ liệu CI có một quy tắc xác nhận cho nó.

Xem nó sống ở đây: Validation Rule

Rule: is_unique

Returns FALSE nếu các yếu tố hình thức không phải là duy nhất cho các bảng và trường tên trong tham số. Lưu ý: Quy tắc này yêu cầu bật Trình tạo truy vấn để hoạt động.

Ví dụ: is_unique[table.field]

$this->form_validation->set_rules(
     'username', 'Username', 
     'required|min_length[5]|max_length[12]|is_unique[users.username]', 
     array(
       'required'  => 'You have not provided %s.', 
       'is_unique'  => 'This %s already exists.' 
     ) 
); 

Để biết thêm sử dụng trước xác nhận, Bạn có thể thêm các qui định hiện Setting validation Sử dụng một mảng.

 $this->form_validation->set_rules(
      'username', 'Username', 
      'required|min_length[5]|max_length[12]|is_unique[users.username]', 
      array(
        'required'  => 'You have not provided %s.', 
        'is_unique'  => 'This %s already exists.' 
      ) 
    ); 


    $config = array(
     'your_rule_name' => array(
       array(
         'username', 'Username', 
         'required|min_length[5]|max_length[12]|is_unique[users.username]', 
         array(
           'required'  => 'You have not provided %s.', 
           'is_unique'  => 'This %s already exists.' 
         ) 
       ) 
     ),   
     array(
       'field' => 'email', 
       'label' => 'Email', 
       'rules' => 'required' 
     ) 
); 

$this->form_validation->set_rules($config); 
Các vấn đề liên quan