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

来源:互联网 发布:linux的finger命令 编辑:程序博客网 时间:2024/05/22 00:43

今天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()是代表什么呢?继续存疑。



	
				
		
原创粉丝点击