mysqli_insert_id的问题

在封装函数的时候发现的问题,无论我怎么写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);
    }注释掉的是我自己改过来的代码,比较凑合,勉强能用。

if(!function_exists('mysql_pconnect')){ function mysql_pconnect($dbhost, $dbuser, $dbpass){ global $dbport; global $dbname; global $linkid; $linkid = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); return $linkid; } function mysql_select_db($dbname){ global $linkid; return mysqli_select_db($linkid,$dbname); } function mysql_fetch_array($result, $type=''){ if ($type) { return mysqli_fetch_array($result, $type); }else{ return mysqli_fetch_array($result); } } function mysql_fetch_assoc($result){ return mysqli_fetch_assoc($result); } function mysql_fetch_row($result){ return mysqli_fetch_row($result); } function mysql_free_result($result){ return mysqli_free_result($result); } function mysql_query($cxn){ global $linkid; return mysqli_query($linkid,$cxn); } function mysql_insert_id(){ global $linkid; return mysqli_insert_id($linkid); } function mysql_affected_rows(){ global $linkid; return mysqli_affected_rows($linkid); } function mysql_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_real_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_close(){ global $linkid; return mysqli_close($linkid); } function mysql_get_server_info(){ global $linkid; return mysqli_get_server_info($linkid); } function mysql_num_rows($result){ return mysqli_num_rows($result); } } error_reporting(E_ERROR | E_PARSE); error_reporting(E_ALL ^ E_WARNING); error_reporting(E_ALL & ~E_NOTICE); error_reporting(E_ALL ^ E_DEPRECATED);给代码加上注释
06-06
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值