2013-04-20 4 views
6

я пытаюсь проверить, если идентификатор в базе данных уже существует, и если это не только тогда вставить этот идентификатор, а не другие, которые существуютКак проверить, если идентификатор уже существует - CodeIgniter

Я попытался сделать где заявление, проверяет, является ли их это идентификатор существует в базе данных, но даже если их есть новая информация не вставить его в базу данных

Im совершенно потерял здесь любого руководства будет оценен

п.с. не хочу обновлять строку, я хочу вставить новую обновленную версию, которая не существует

$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

Вы проверили, что означает '$ q', когда вы используете это? – matthewpavkov

+0

$ q проверяет, существует ли какая-либо из идентификаторов в db, потому что она не вставляет новую информацию в базу данных. – Hashey100

+0

Правильно, но я бы удостоверился, что $ q фактически является «ложным». Попробуйте 'if ($ q-> num_rows()> 0) {...}', а затем просто выполните 'echo' в' '', чтобы вы могли точно видеть, что происходит. – matthewpavkov

ответ

9

Модель

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

Для этого вы всегда можете использовать правило проверки формы is_unique [table.filed_name] для проверки уникальных значений – MSN

1

Вам нужно выбрать идентификатор в таблице MYSQL с идентификатором, который вы хотите проверить, а затем подсчитать строки. Если число строк равно 0, идентификатор не существует.

 $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

обычно поле «Идентификатор» устанавливается с auto_increment и установить первичный , который является уникальным и не повторяется. Поэтому нет проблем беспокоиться о существующих.

Однако, в вашем случае я думаю, что вы не используете его как «уникальное поле».

Позвольте привести пример.

Здесь у меня есть имя таблицы 'плоды'

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

в модели

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 выставляются значения из вашей формы –

+0

Я пробовал ваш код, но он возвращает все результаты как false, даже если их новый идентификатор – Hashey100

+0

okay получил его работу, которую вы должны использовать | num_rows(); проверьте мой следующий ответ для полного решения –

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

Это должно сделать это.

3

У вас есть логическая проблема с кодом, который вам нужно исправить.

В вашем коде вы сохраняете результат по вашему запросу как $q = $this->db->get('testing'), и $q всегда будет оценивать true, независимо от количества строк, возвращаемых вами.

Вам необходимо проверить количество строк, используя $query->num_rows() > 0, а затем остальное вашего кода будет вести себя так, как вы ожидаете.

Для получения более подробной информации см: http://ellislab.com/codeigniter/user-guide/database/results.html

0

Для проверки идентификатора или любое значения столбца существует не в CI баз данных есть правило проверки для него.

Посмотреть здесь жить: Validation Rule

Правило: is_unique

Возвращает FALSE, если элемент формы не является уникальным для таблицы и поля имени в параметре. Примечание. Это правило требует, чтобы Query Builder был включен для работы.

Пример: 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.' 
     ) 
); 

Для получения дополнительного Передового использования проверки, Вы можете добавить все правила проверки параметра с помощью массива.

 $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); 
Смежные вопросы