我正在尝试获取最后一个查询插入id。但我的代码总是返回零。
我的代码
private function Cnn()
{
return mysqli_connect('localhost','root','root','db');
}
protected function MyCommandInsertId($sql)
{
if(mysqli_query($this->Cnn(),$sql))
{
return mysqli_insert_id($this->Cnn());
}
$this->err = mysqli_error($this->Cnn());
return false;
}
public function Insert()
{
$sql = "insert general_info(name,email,password)
values('".$this->ms($this->name)."','".$this->ms($this->email)."','".md5($this->password)."')";
//print''.$sql.'';
$last_insert_id=$this->MyCommandInsertId($sql);
}
此处返回mysqli_insert_id($this->Cnn());
始终返回零
答案 0 :(得分:1)
根据 http://php.net/manual/en/mysqli.insert-id.php
有两个可能的问题
解决方案:
通过CBroe,你是一个新的连接。 因此,它认为您没有插入新记录。
重写函数Cnn()并将其更改为私有变量。
答案 1 :(得分:1)
请检查mysqli_insert_id
的定义: -
mysqli_insert_id()函数返回最后一个查询中使用的id(使用AUTO_INCREMENT生成)。
这意味着表中具有AUTO_INCREMENT
值的列不存在。
或者
在当前程序流程中,您的表格上没有以编程方式插入数据。由于代码中未触发插入查询,因此返回零。
注意: - 首先在代码中执行插入查询,然后检查mysqli_insert_id
给出的输出是什么。然后你可以很容易地理解我想说的话。谢谢
我当地的一个工作案例就在这里: -
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
function Cnn()
{
$conn = mysqli_connect('localhost','root','','stack');
return $conn;
}
function MyCommandInsertId($sql)
{
$conn = Cnn();
if(mysqli_query($conn,$sql))
{
$lastid = mysqli_insert_id($conn);
return $lastid;
}else{
$err = mysqli_error($conn);
return $err;
}
}
function Insert()
{
$sql = "INSERT INTO bom(bom_description,product_id,finish_product,bom_quantity,UOM) values('Table cleaner','','','','')";
$st_insert_id = MyCommandInsertId($sql);
echo $st_insert_id;
}
Insert();
?>
输出: - http://prntscr.com/9u2iyv(插入的ID)和插入后的http://prntscr.com/9u2j6i(table视图
答案 2 :(得分:-2)
在我的情况下,我的sqli被声明在当前函数范围之外
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
我需要做的是在global
前面添加$conn
function want() {
///...... query stuff
global $conn;
$conn->insert_id; // Now works
}