CI 数据库Active Record 类使用,让我很想不明白的几个问题
ci使用的是最新官网下载的2.1.4版本下面是我在modles目录下文件中的三个操作数据库的函数
function add_user($openID,$mac='')
{
$data = array('user_openid' => $openID,'user_mac' => $mac,'reg_time' => date("Y-m-d H:i:s"),);
$status = $this->user_status($openID);
if('ok'==$status){//mac 和openId都有说明可能是换手机了,需要重新绑定
$this->db->update('tb_weixin_user', array('user_mac' => $mac), array('user_openid' => $openID));
}else if('no_mac'==$status){//关注后没有mac,这次是认证添加,只更新mac地址
$this->db->update('tb_weixin_user', array('user_mac' => $mac), array('user_openid' => $openID));
}else if('no_user'==$status){
$this->db->insert('tb_weixin_user', $data);
}
}
function user_status($openid)
{
$query=$this->db->get_where('tb_weixin_user', array('user_openid' => $openid));
$ret='';
if($query->num_rows()>0)
{
foreach($query->result() as $row)
{
if($row->user_mac ==''){
$ret='no_mac';
}else{
$ret='ok';
}
}
}else{
$ret='no_user';
}
return $ret;
}
function del_user($oepnID)
{
$data = array('user_openid' => $oepnID);//比较要加上引号,
$this->db->delete('tb_weixin_user', $data);
}
//这是我在controllers中写的测试函数并通过浏览器测试可以通过
//调用时按下面方式调用多数时候都测试通过
public function is_auth($mac)
{
$this->load->model('weixin_user');
echo $this->weixin_user->is_auth($mac);
}
public function del_user($openID)
{
$this->load->model('weixin_user');
$this->weixin_user->del_user($openID);
echo $this->db->last_query();
}
public function add_user($openID)
{
$this->load->model('weixin_user');
$this->weixin_user->add_user($openID);
echo $this->db->last_query();
}
下面是我在浏览器中测试有时会出现下面问题,del的时候会丢掉两个字符
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233037dq444z44a9czuqha.jpg
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233036xz9vb7luvtl9r4mr.jpg
下面还有更让我想不明白的
我在这个 那三个测试函数的文件中添加一个函数
用下面两中方法调用都失败
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233809lgg7e1grv7r1okvv.jpg
//提示如下错误
//Query error: Unknown column 'oaw3DjtjpjnvQPXDJAepJjpM138k' in 'where clause'而且这里和传进去的还少两个字符
//oaw3DjtjpjnvQPXDJAepJjpM138k是微信关注后的openID
//但是通过浏览器传参调用时没有这个错误
$this->db->where('uid',$id);
$this->db->delete('user');
//即使写成上面这种也还是报Query error: Unknown column 错误。
求大哥指导一二,万分感谢
下面是我在浏览器中测试有时会出现下面问题,del的时候会丢掉两个字符
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233037dq444z44a9czuqha.jpg
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233036xz9vb7luvtl9r4mr.jpg
用下面两中方法调用都失败
http://codeigniter.org.cn/forums/data/attachment/album/201405/19/233809lgg7e1grv7r1okvv.jpg 这个没遇到过
试着判断下是哪一步截取了字符串
AR模型只做安全性处理和负责组装sql 一叶扁舟 发表于 2014-5-20 08:26
这个没遇到过
试着判断下是哪一步截取了字符串
AR模型只做安全性处理和负责组装sql ...
标准插入(insert)$sql = "INSERT INTO mytable (title, name)
VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";
$this->db->query($sql);
echo $this->db->affected_rows();按照手册里这个写也是报哪个错,应该是escape函数有问题直接用sql语句插入是没有问题的function add_user($openID,$mac=''){ $sql = "INSERT INTO tb_weixin_user (user_openid, user_mac, reg_time) VALUES ('".$openID."', '".$mac."','".date("Y-m-d H:i:s")."')"; $this->db->query($sql);} 本想着简单方便,结果被它搞死了,一个简单的插入语句都不行,浪费我三五天时间,第一次用php,突然觉得ci和php很烂,这次用完估计再也不会用了
这个,你的问题诡异了点,你可以用这种url看看 index.php/weixin/add_user/?openid=xxxxx,微信我没搞过,不知道query string方式行不行。调用错误的问题,看样子是把openid的值当成字段了,条件你可能携程了array(openid,value)而不是array(openid=>value),代码不完整看不太出来。
我用ci做了很多东西了,也没见出现这些问题啊,一般的网站,一般的webservice都做过,都挺正常的啊 www2t 发表于 2014-5-20 11:26
标准插入(insert)$sql = "INSERT INTO mytable (title, name)
VALUES (".$this->db->escape($ti ...
你用的哪个数据库驱动
在对应的数据库/driver里看看escape_str()是怎么处理字符串的
首先不要使用 URI 分段的形式传递这么复杂的参数,请使用 GET 传参。 sunboat 发表于 2014-5-20 13:48
这个,你的问题诡异了点,你可以用这种url看看 index.php/weixin/add_user/?openid=xxxxx,微信我没搞过, ...
手册是这么写,这样也不行,本来图个方便快捷,结果还被搞到里面了
标准插入(insert)$sql = "INSERT INTO mytable (title, name)
VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";
直接写sql语句就是正常的
$sql = "INSERT INTO tb_weixin_user (user_openid, user_mac, reg_time) VALUES ('".$openID."', '".$mac."','".date("Y-m-d H:i:s")."')";
...$this->db->insert($tablename,array());这样 就可以了。。。
页:
[1]