在封装函数的时候发现的问题,无论我怎么写MYSQLI_INSERT_ID()返回值都一直是0,后来找了网上很多例子,发现这个问题还不少,很多人都遇到了这个问题,然后我就找了找解决办法。
首先要解决问题,需要先来了解一下这个函数的作用。官方对他做出的解释是mysqli_insert_id() 函数返回最后一个查询中自动生成的 ID(通过 AUTO_INCREMENT 生成)。就是返回上一个查询语句中的id值。
而网上对返回值是0的解释都是集中在“最后一个查询中“这一段话中,主要就是需要将MYSQLI_INSERT_ID写在一个执行过以后就是MYSQLI_QUERY的select的SQL 语句,这样才能返回一个正确的值
<?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localhost","root","123456","t2"); if (mysqli_connect_errno($con)) { echo "连接 MySQL 失败: " . mysqli_connect_error(); } mysqli_query($con,"INSERT INTO websites (name,url,alexa) VALUES ('123','http://www.baidu.com',123)"); // 输出自动生成的 ID echo "新 id 为: " . mysqli_insert_id($con); mysqli_close($con); ?>
在网上找的大致就是这样的结构,可是我的mysqli封装在一个函数中,在这个函数中return的值是mysqli_insert_id,在return之前我也确实执行了一个select的语句然而最后的返回值还是0,最后我就不得不找其他的方法来代替了,就是这个地方多的有些不够完美。
然后附上我写的代码
function insert($table,$array)//插入
{
$link = mysqli_connect('localhost','root','root',"shopimooc") or die("数据连接失败error:");
$key = join(",",array_keys($array));
$vals = "'".join("','",array_values($array))."'";
$sql = "insert into {$table} (id,$key) values(' ',{$vals})";
// if(mysqli_query($link,$sql))
// {
// $flag=1;
// }
// else{
// $flag=0;
// }
// return $flag;
$result = mysqli_query($link,$sql);
return mysqli_insert_id($link);
}注释掉的是我自己改过来的代码,比较凑合,勉强能用。