我有以下代码:
public function createNewGuide($userID,$guideName)
{
$sql =" INSERT INTO myTable(name, updated)
VALUES ('$guideName', 'NOW()')";
//Process query
$this->query($sql); // This inserts the new row
$this->query('LAST_INSERT_ID()'); // This throws an error
return $this->query_result;
}
我的查询功能如下:
private function query($sql)
{
$this->query_result = mysql_query($sql, $this->conn)
or die("Unable to query local database <b>". mysql_error()."</b><br>$sql");
}
我收到以下错误:
MySQL数据库错误:您的SQL语法出错;检查 与您的MySQL对应的手册 用于正确语法的服务器版本 在“LAST_INSERT_ID()”附近使用
我用Google搜索并查看了类似的问题,但未找到答案:(
我没有尝试PHP function mysql_insert_id(),因为我真的想用SQL做这件事。
答案 0 :(得分:11)
答案 1 :(得分:6)
你忘记了SELECT:
"SELECT LAST_INSERT_ID()"
答案 2 :(得分:4)
如果没有SELECT,那将无法运作:
SELECT LAST_INSERT_ID();
或者只是使用mysql_insert_id
,它是一个php函数,它在php级别上也是如此。但是,如果表ID为BIGINT,请使用第一种方法。
答案 3 :(得分:2)
如果您在同一环境中有多个数据库链接,则应始终指定链接标识符。
如果是mysql_insert_id
php函数,您应该始终使用mysql_insert_id( $link_id );
如果您使用SELECT LAST_INSERT_ID( link_id )
通过SQL查询调用它。
答案 4 :(得分:1)
当您使用mysql_*
函数时,为什么不使用mysql_insert_id
函数,而不是自己调用LAST_INSERT_ID()
?
但是,您获得的SQL错误可能是因为您要发送到服务器的SQL查询是这样的:
LAST_INSERT_ID()
而不是这一个:
select LAST_INSERT_ID()
如果您正在执行SQL查询以...选择...某些数据,则应该有select
。
答案 5 :(得分:1)
这些人已经回答你错过了SELECT前缀。
顺便说一下,你应该看一下你的INSERT语句......如果$guideName
没有被转义,它就有一个明确的SQL注入门。
答案 6 :(得分:1)
LAST_INSERT_ID()
将返回零。
您应该检查您的INSERT
是否真的成功了。始终测试mysql_query()
和其他函数的返回值,如果发生错误,通常为FALSE
。
$sql =" INSERT INTO myTable(name, updated)
VALUES ('$guideName', 'NOW()')";
if ($this->query($sql) === FALSE) {
die(mysql_error());
}
if (($result = $this->query("SELECT LAST_INSERT_ID()")) === FALSE) {
die(mysql_error());
}
if (($row = mysql_fetch_array($result)) === FALSE) {
die(mysql_error());
}
$id = $row[0];
答案 7 :(得分:1)
如果 SELECT LAST_INSERT_ID(); 返回0;
使用此查询:
从table_name订购LAST_INSERT_ID(Id)按LAST_INSERT_ID(Id)desc limit 1;
它会给你所需的结果。
答案 8 :(得分:0)
SELECT LAST_INSERT_ID();
如果我是你。在php之前,我会首先从命令行或查询浏览器中获取insert / select last_insert_id。至少,这至少会确认或拒绝正确的sql语法。
答案 9 :(得分:0)
我同意任何人说你应该使用mysql_insert_id
,但是如果你想使用LAST_INSERT_ID
,你可以使用它:
function getLastInsertId($db_connection)
{
$result = 0;
if($query_result = mysql_query("SELECT LAST_INSERT_ID();", $db_connection))
{
$temp = mysql_fetch_row($query_result);
$result = $temp[0];
}
return $result;
}
答案 10 :(得分:0)
我认为您的表格包含datetime
/ timestamp
列,并且您的查询的值为NOW()
varchar
而非datetime
值,因此您的{{1应该返回SQL query
。
如果查询返回false
,您将不会获得最后插入的ID(始终用于当前连接)。
答案 11 :(得分:0)
我用
$Last_ID=$mysqli->insert_id;
一旦我有问题。运行插入查询后,Insert_id 为 int(0)。 问题是在获取 insert_id 之前的“插入”查询之后的附加“选择”查询中,正如我假设的那样,它抛出它。