Я пытаюсь проверить, существует ли идентификатор в базе данных, а если нет, то только вставьте этот идентификатор, а не другие, которые существуют
Я попытался сделать оператор where, который проверяет, существует ли их идентификатор в базе данных, но даже если их новая информация не вставляет в базу данных
Я совсем потерял здесь любое руководство будет оценено
ps я не хочу обновлять строку, я хочу вставить новую обновленную, которая не существует
$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'); }
Модель
<?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); } } } ?>
У вас есть логическая проблема с кодом, который вам нужно исправить.
В вашем коде вы сохраняете результат из своего запроса как $q = $this->db->get('testing')
, а $q
всегда будет оценивать true, независимо от количества возвращаемых строк.
Вам нужно проверить количество строк, используя $query->num_rows() > 0
а остальная часть кода будет вести себя так, как вы ожидаете.
Для получения дополнительной информации см .: http://ellislab.com/codeigniter/user-guide/database/results.html
$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); }
Это должно сделать это.
Вам нужно выбрать идентификатор в таблице 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 }
обычно поле «id» устанавливается с помощью 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); } }
Для проверки идентификатора. Или любое значение столбца существует не в базе данных. В CI есть правило проверки.
Смотрите здесь: Правило проверки
Правило: 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);