php - 将另一个表中的 InsertLastID 插入到新表中?使用 PDO 准备语句

标签 php mysql database pdo prepared-statement

我有这两个表 comments_tbl 和 news_comments_tbl,我正在使用 MySQL。

当我创建评论时,我想将最后创建的评论 ID 发送到新表 news_comments_tbl 中。

我在使用准备好的语句之前使用了这个方法,它运行良好:

//comment
$name     = $_POST['name'];
$comment  = $_POST['comment'];

//ID
$commentidfk  = $_POST['comments_id'];
$newsidfk     = $_POST['news_id_fk'];
$newsidfk     = $_GET['news_id_fk'];

if (isset($_POST['comment']))
{

  $sqlquery ="INSERT INTO comments_tbl(comments_id, name, comment)
  VALUES (NULL, '$name', '$comment')";
  $result = $conn->query($sqlquery) or die('Error');

  $sqlquery2 ="INSERT INTO news_comments_tbl(news_id_fk, comments_id_fk)
  VALUES ('$newsidfk', LAST_INSERT_ID())";
  $result2 = $conn->query($sqlquery2) or die('Error'); 

  header("location:news.php");

}
    else
    {
        echo 'Error';
    }

但是现在当我转换为使用 PDO 准备语句时,我无法让它工作。评论已创建,但我无法将最后插入的 id 插入新表 (news_comments_tbl)

我是这样做的:

$query  = "INSERT INTO comments_tbl(comments_id, name, comment) VALUES (NULL,?,?)";

  $stmt = $conn->prepare($query);
  $stmt->bindParam(1,$name, PDO::PARAM_STR);
  $stmt->bindParam(2,$comment, PDO::PARAM_STR);

  $stmt->execute();

  return $conn->lastInsertId('comments_id');

  $query  = "INSERT INTO news_comments_tbl(news_id_fk, comments_id_fk) VALUES (?, LAST_INSERT_ID)";

  $stmt = $conn->prepare($query);
  $stmt->bindParam(1, $newsidfk, PDO::PARAM_INT);

  $stmt->execute();

  header("location:news.php");

最佳答案

在执行第二条准备语句之前,您不应该发出返回。如前所述,您没有在第二个查询中正确调用 LAST_INSERT_ID,但您也不需要它。你的代码应该看起来更像这样:

$comments_id = $conn->lastInsertId();

$query  = "INSERT INTO news_comments_tbl(news_id_fk, comments_id_fk) VALUES (?, ?)";

$stmt = $conn->prepare($query);
$stmt->bindParam(1, $newsidfk, PDO::PARAM_INT);
$stmt->bindParam(1, $comments_id, PDO::PARAM_INT);
$stmt->execute();

关于php - 将另一个表中的 InsertLastID 插入到新表中?使用 PDO 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181892/

相关文章:

java - Hibernate - 检索所有表信息 - 列名、索引、长度并填充为表

php - 问题是在mysql中选择

两条 COUNT 语句的 MySQL 总和

mysql - 存储对 Mysql 表的唯一引用

mysql - 如何创建一个 UNION 但不是放在底部而是放在 MYSQL 的左侧

mysql - E_WARNING : Error while sending STMT_PREPARE packet. PID=*

sql - SQL中union和union all有什么区别?

php - 当我有权限的用户登录时,标题对我的管理页面不起作用

java - 上传到服务器后图像文件为空

php - 上传前如何使用php获取安全文件名