我正在尝试检查数据库中的id是否已经存在,如果不存在则只插入该id而不是其他存在的
我试过做一个where语句,检查数据库中是否存在id,但即使它们是新信息,也不会将其插入数据库
我在这里很丢失 任何指导将不胜感激
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');
}
答案 0 :(得分:11)
模型
<?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);
}
}
}
?>
答案 1 :(得分: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);
}
这应该这样做。
答案 2 :(得分:3)
您的代码存在逻辑问题,需要修复。
在您的代码中,您将查询结果保存为$q = $this->db->get('testing')
,
无论您返回的行数是多少,$q
总是会评估为真。
您需要使用$query->num_rows() > 0
检查行数,然后检查其余行数
您的代码将按预期运行。
有关详细信息,请参阅:http://ellislab.com/codeigniter/user-guide/database/results.html
答案 3 :(得分:1)
您需要在MYSQL表中选择要检查的ID的ID,然后计算行数。如果行计数为0,则id不存在。
$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
}
答案 4 :(得分:1)
通常'id'字段设置为 auto_increment 并设置 primary ,这是唯一且不可重复的。所以担心现有问题没有问题。
但是,在您的情况下,我认为您并未将其用作“独特字段”。
让我举个例子。
这里我有一个表名'fruits'
++++++++++++++++++++++++++++++++++++
င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);
}
}
答案 5 :(得分:0)
用于检查ID或不存在于数据库CI中的任何列值都有一个验证规则。
在此处观看: Validation Rule
规则:is_unique
如果表单元素对参数中的表和字段名称不唯一,则返回FALSE。注意:此规则要求启用查询生成器才能工作。
示例: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);
答案 6 :(得分:0)
您应该尝试这样:
public function record_exists(){
$exists = $this->db->get_where('table_name', array('id' => $id));
if($exists->num_rows() > 0 ){
echo "Some message";
return false;
}else{
// Insert your data into the database...
}
}