我一直在搜索谷歌这个问题并且一无所获。人们只是继续在last_insert_id上复制MySQL文档而没有别的。
我遇到了关于last_insert_id的问题,因为对于这两种情况(php& sql),它都会返回0。
是的:我已经设置了PRIMARY&具有AUTO_INCREMENT值的UNIQUE字段 是的:我之前做了一些插入 NO:使用INSERT和SELECT LAST进行双重查询...不起作用。
我创建了一个用于维护连接的类Db&查询:
class Db
{
private function connect()
{
$db = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name, $this->db_port);
if(mysqli_errno($db))
{
file_put_contents(date('Y-m-d').'mysql_error.txt',mysqli_error($db),FILE_APPEND | LOCK_EX);
echo "Connection error";
exit();
}
else
{
return $db;
}
}
public function insert($i_what, $i_columns, $i_values, $i_duplicate='') {
$insert = $this->connect()->query("INSERT INTO ".$i_what.$i_columns.$i_values.$i_duplicate);
$last_id = $this->connect()->insert_id;
$this->connect()->close();
return $last_id; }
}
id int(11) AUTO_INCREMENT PRIMARY UNIQUE
name varchar(32) utf8_general_ci
firstname varchar(64) utf8_general_ci
lastname varchar(64) utf8_general_ci
它不起作用。
答案 0 :(得分:2)
你需要的只是常识。
您描述的问题是不可能的。所以 - 你必须再次检查。
已经有数百个问题,开场海报是100%,他们做的一切都是正确的。起初。
在其中的每一个中都发现了一个愚蠢的错误,比如插入一个数据库并从另一个数据库中选择。
正如我所说。是的,你没有关闭你的连接。出于某种原因,您只需为每个数据库调用打开一个全新的。难怪全新的清洁连接返回0。
不要自己写一个类,而是使用现成的类,比如https://github.com/colshrapnel/safemysql
这将是更安全和方便的方式。并返回插入ID