[英]mysql_insert_id() echos 0
我不是第一个遇到这个问题但其他人的解决方案不起作用。 对于mysql_insert_id(),此脚本始终返回0; 我正在使用多个主键。
$sql = "INSERT INTO Produkte (Name,Price,Description,User)
VALUES ('".$_POST['name']."','".$_POST['price']."','".$_POST['description']."','".$_SESSION['user']."');";
$result = $GLOBALS['DB']->query($sql);
echo mysql_insert_id();
echo '<div class="saving">';
if($result){
echo "Saved!";
} else{
echo("Saving failed");
} echo '</div>';
}
我已经尝试过mysql_insert_id($link)
,我将$link
到mysql_connect()
和mysql_insert_id($GLOBALS['DB']->MySQLiObj)
我的$ GLOBAL ['DB']
if(!isset($GLOBALS['DB']))$DB = new \System\Database\MySQL(MYSQL_HOST,MYSQL_BENUTZER,MYSQL_KENNWORT,MYSQL_DATENBANK,MYSQL_PORT);
我的MySQL类:
public $MySQLiObj = null;
function __construct($server, $user, $password, $db, $port = '3306')
{
$this->MySQLiObj = new \mysqli($server, $user, $password, $db, $port);
if (mysqli_connect_errno())
{
echo "Keine Verbindung zum MySQL-Server möglich.";
trigger_error("MySQL-Connection-Error", E_USER_ERROR);
die();
}
$this->query("SET NAMES utf8");
}
您的查询失败,因为您使用的是保留关键字 desc
而没有刻度。 结果INSERT失败,因此不返回ID。
$sql = "INSERT INTO Produkte (Name,Price,Desc,User)
VALUES ('".$_POST['name']."','".$_POST['price']."','".$_POST['description']."','".$_SESSION['user']."');";
应该
$sql = "INSERT INTO Produkte (Name,Price,`Desc`,User)
VALUES ('".$_POST['name']."','".$_POST['price']."','".$_POST['description']."','".$_SESSION['user']."');";
请不要在新代码中使用mysql_*
函数 。 它们不再维护, 并且已被正式弃用 。 看到红色的盒子 ? 了解准备好的语句 ,并使用PDO或MySQLi - 本文将帮助您确定哪些。 如果您选择PDO, 这是一个很好的教程 。
mysql_insert_id()
的文档很好地解释了这一点:
上次查询成功时为AUTO_INCREMENT列生成的ID, 如果上一个查询未生成
AUTO_INCREMENT
值 ,则为0;如果未建立MySQL连接,则为FALSE。
您的表可能没有任何列设置为AUTO_INCREMENT
。 在这种情况下, mysql_insert_id()
将返回0
。
通常的免责声明:不推荐使用mysql_
函数,很快就会将其删除。 停止使用它们并切换到MySQLi / PDO。
这里的核心问题是你使用mysqli
进行query()
调用,然后尝试使用mysql_insert_id()
函数。
请注意, mysqli
和mysql
函数是两个完全独立的库,彼此不兼容。
如果您在mysqli
的一部分中使用mysqli
,则必须将mysqli
用于所有其他与DB相关的代码,否则它们将无法一起工作。
所以你必须使用mysqli::$insert_id
属性。
您在问题中提到可以访问连接对象$GLOBALS['DB']->connection
。 在这种情况下,您应该能够编写如下代码:
$newId = $GLOBALS['DB']->connection->insert_id;
我希望有所帮助。
PS:当我在这里时,我会补充一点,你应该避免将$_POST
变量直接放入你的查询字符串中。 这种做法非常糟糕,并且具有一些危险的安全隐患。 您应该考虑使用mysqli->prepare()
和mysqli->bind_param()
来为您的查询添加参数。
如果您使用的是phpMyAdmin,则可能在配置文件( config.inc.php
)中禁用了PersistentConnections。
如果是这种情况,请将其更改为:
$cfg['PersistentConnections'] = TRUE;
我猜多重错误:
mysqli_insert_id($con) //$con is connection obj
Sql查询:sql-query结尾的额外semi-colon
和使用的保留关键字DESC
"INSERT INTO Produkte (Name,Price,`Desc`,User)
VALUES ('".$_POST['name']."','".$_POST['price']."','".$_POST['description']."','".$_SESSION['user']."')";
好的,我终于成功了! 在我的类中,我添加了函数insert_id(),然后在本地添加了insert_id变量。
public function insert_id()
{
$result = $this->MySQLiObj->insert_id;
return $result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.