【问题标题】:mysql_insert_id($result) not returning IDmysql_insert_id($result) 不返回 ID
【发布时间】:2016-12-13 03:10:21
【问题描述】:
$SQL = "INSERT INTO primarySkills (primaryName) VALUES $surveySQL";
$result = mysql_query($SQL) or die ('Cannot execute query...'.$SQL);
$surveyID = mysql_insert_id($result);

上述代码将正确输入表数据(primaryID,primaryName),但不会返回使用mysql_insert_id()生成的id。请告诉我为什么没有返回id

真正奇怪的是,我之前在同一个脚本中对不同的表使用了这个函数两次,并且它在那里工作。我仔细检查了 primaryID 是 auto_increment 和主键。

祝福!

【问题讨论】:

  • 您确定插入语句确实有效吗?我觉得有问题。
  • stop using mysql_functions,因为它们已从 PHP 中删除
  • 这很不寻常,我已经查看了其他 mysql_insert_id() 并且这个问题是独一无二的。

标签: php mysql


【解决方案1】:

停止使用mysql函数
但是,您的问题可能是 primaryID 不是自动增量,也可能不是主键。为了使 mysql_insert_id() 工作,应该有一个自动增量列。同时更改查询。

$SQL = "INSERT INTO primarySkills (primaryName) VALUES ($surveySQL)";

并尝试使用 mysql_insert_id() 而不是 mysql_insert_id($result)。

【讨论】:

  • 是auto_increment和主键
  • 试试mysql_insert_id()
  • 这也是正确答案。但是,因为我最好改成mysqli,所以我检查了mysqli的答案。
【解决方案2】:

这是一个使用 pdo 的示例,因为自 php 7 起 MYSQL 函数已被删除。我没有测试您的 sql 命令。替换这些值:

localhost: your host
3306: your port if different
dbname: the name of your database
root: your username
'': the last parameter is your password.

<?php
$conn = new PDO('mysql:host=localhost:3306;dbname=testdb', 'root', '');
$conn->SetAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   
$SQL = "INSERT INTO primarySkills (primaryName) VALUES (:test)";
$insert = $conn->prepare($sql);
$insert->bindValue(":test", $surveySQL, PDO::PARAM_STR);
$insert->execute();
$last_insert_id = $conn->lastInsertId();
?>

当您完成测试并准备投入生产时,继续删除这行代码:

$conn->SetAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   

希望这会有所帮助。

【讨论】:

  • 谢谢。当我更改为 mysqli 时,我可以在 mysqli_insert_id 中使用 $conn ,否则我必须将 mysql_insert_id 留空。
  • 如果这是正确答案,请接受。谢谢!
  • 我确实接受了!两个答案都是正确的。你的更正确,因为我应该迁移到 mysqli。
  • 赞成或反对票下有复选标记。请按那个。
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 2013-03-21
  • 2023-03-14
  • 2022-09-22
相关资源
最近更新 更多