我不是第一个遇到这个问题,但其他人的解决方案不起作用。 对于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");
}
答案 0 :(得分:3)
您的查询失败,因为您使用的reserved keyword 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']."');";
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:3)
mysql_insert_id()
的文档很好地解释了这一点:
上一次成功查询为AUTO_INCREMENT列生成的ID,如果上一个查询未生成
AUTO_INCREMENT
值,则 0;如果未建立MySQL连接则为FALSE。< / p>
您的表可能没有将任何列设置为AUTO_INCREMENT
。在这种情况下,mysql_insert_id()
会返回0
。
通常的免责声明:mysql_
函数已弃用,很快就会删除。停止使用它们并切换到MySQLi / PDO。功能
答案 2 :(得分:1)
这里的核心问题是,您使用mysqli
进行query()
来电,但之后尝试使用mysql_insert_id()
功能。
请注意,mysqli
和mysql
函数是两个完全独立的库,彼此不兼容。
如果您在代码的一部分中使用mysqli
,则必须使用mysqli
来代替所有其他与数据库相关的代码,否则它们将无法正常工作在一起。
所以你必须使用mysqli::$insert_id
属性。
您在问题中提到可以$GLOBALS['DB']->connection
访问您的连接对象。在这种情况下,您应该能够按如下方式编写代码:
$newId = $GLOBALS['DB']->connection->insert_id;
我希望有所帮助。
PS:当我在这里时,我会补充一点,你应该避免将$_POST
变量直接放入你的查询字符串中。这种做法非常糟糕,并且具有一些危险的安全隐患。您应该考虑使用mysqli->prepare()
和mysqli->bind_param()
来为您的查询添加参数。
答案 3 :(得分:1)
如果您使用的是phpMyAdmin,可能在配置文件(config.inc.php
)中禁用了PersistentConnections。
如果是这种情况,请将其更改为:
$cfg['PersistentConnections'] = TRUE;
答案 4 :(得分:0)
答案 5 :(得分:0)
mysqli_insert_id($con) //$con is connection obj
Sql查询:sql-query end中的额外semi-colon
和使用的保留关键字DESC
"INSERT INTO Produkte (Name,Price,`Desc`,User)
VALUES ('".$_POST['name']."','".$_POST['price']."','".$_POST['description']."','".$_SESSION['user']."')";
答案 6 :(得分:0)
好的,我终于成功了! 在我的类中,我添加了函数insert_id(),然后在本地添加了insert_id变量。
public function insert_id()
{
$result = $this->MySQLiObj->insert_id;
return $result;
}