使用mysqli时,insert 语句与 select语句的区别

3 篇文章 0 订阅

今天coding的时候,遇到了一个问题,直接贴代码:


$db_obj = db_conn::getDbinstance()->getDbConn();

//插入

$sql_reg = "insert into user (username, password, nickname, email,regdate) values (?,?,?,?,?)";

if ( $stmt = $db_obj->prepare($sql_reg) ){
    $stmt->bind_param('ssssd',$username,$pswd,$nickname,$email,$reg_time);
    if ( !$stmt->execute() ) {
    
    exit("0");//插入失败,用户名重复

    }
    $stmt->close();
}else{
    
    exit(“11”);//数据库操作预编译失败
 }
$db_obj = db_conn::getDbinstance()->getDbConn();

$sql_check_username = "select password from user where username = ?";

if ( $result = $db_obj->prepare($sql_check_username) ){
    $result->bind_param("s",$username);

    $result->execute(); 
    $result->bind_result($t_pswd);
        
    if( !$result->fetch() ){
        exit("0");//用户名不存在
    }   
    $result->close();
}else{
    exit ("1");//数据库预编译错误
}



这个过程就是遵照着官方文档给出的mysqli实例代码来做的。但是因为需要,加上了对预编译之后,语句是否执行成功了的一个判断。插入语句,因为用户名是unique的,所以,如果执行插入语句,插入相同的用户名,会出现error。同样,在查询语句中,如果查询的username 在数据库中不存在,那么就会给出error提示。


但是,开始的时候,我把这两个判断条件全部加给了对execute函数的判断。却发现,插入操作判断正常,而查询操作用错误数据却怎么也不会跳转到execute错误的判断里去。纠结了好长时间时候,将查询的语句判断改为对fetch()的判断(如上),就运行成功了。


问题就来了,insert产生的unique属性不符合的错误跟select语句产生的不存在错误不是同一种错误吗?


暂时没有找到答案,问题先挂上。求高手解答。


插入重复的带有unique属性的column是错误。会在execute语句返回错误信息。

Returns TRUE on success or FALSE on failure.


但是fetch()函数从官方给出的return值还是看不明白,


select一个不存在的值,是会返回NULL还是FALSE呢?如果是NULL,那么上面代码中的!result->fetch()是代表什么呢?继续存疑。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值