我是小白,谢谢老师解惑下,关于用mysqli_insert_id($link);得到的值是0的问题!
在mysql.func.php中构造了下面的函数: function insert($table,$array){ $link=connect(); $keys=join(",",array_keys($array)); $vals="'".join("','",array_values($array))."'"; $sql="insert {$table}($keys) values({$vals})"; mysqli_query($link,$sql); return mysqli_insert_id($link); } function getInsertId(){ $link=connect(); return mysqli_insert_id($link); }
在pro.func.php中调用
$res = insert ( "imooc_pro", $arr );
打印出来值却不为0.
但
$pid = getInsertId ();
打印出来值为0.
于是不解,百度之
The mysqli_insert_id() function returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.
英语不好,只好大概知道:
mysqli_insert_id() 函数通过查询一个含有AUTO_INCREMENT属性列的表返回一个ID值,如果最后一条查询不是INSERT或者UPDATE操作或者修改的表中不含有AUTO_INCREMEN属性的列,那么这个函数就会返回0.
呃,不知道是不是这个意思.
如果是这个意思,那么在调用getInsertId()函数前,我已经调用了insert ( "imooc_pro", $arr ),应该没问题啊.但就是值就是为0.
后来我想了想,在封装getInsertId()时,我又调用了$link=connect();连接数据库的函数,是这个原因导致的吗?但如果我不调用$link=connect(),我也没办法使用mysqli_insert_id($link)函数.所以这个getInsertId()函数用mysqli_insert_id($link)函数如何能单独进行封装?
然后觉得$pid的值和$res应该是一样的,老师做这两个值的判断if ($res&&$pid)的用意是什么啊?能不就if($res),呃,实际上用这个是可以跑通的~~
呃,然后就是想问问,数据库连接好了,用了之后,是不是一定要关闭数据库,还是说一直可以连接?是不是一会儿连接数据库,一会儿关闭数据库.会Mysql数据库的性能有影响?
我是小白,谢谢老师解惑下!