php - 如何从 "threads"表上相关线程的行中检索自动递增编号?

标签 php mysql sql database

我的数据库中有一个“线程”表和一个“评论”表。两个表都有一个自动递增 ID 列、时间戳等。还有一个“THREAD ID”列,我想在“comments”表中插入线程的 ID。

我的问题是:如何从“threads”表中检索相关线程行的自动递增 ID 号,并在每次插入评论时将此编号插入到“comments”表的“THREAD ID”列中。所以我可以在“评论”和“主题”之间创建链接。

我是 PHP 的初学者,我想通过代码的解释来学习。比如哪个字符串代表什么,哪个方法代表什么..

<?php
/*show error codes*/
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
/* database info*/
define('DB_NAME', 'imageboard');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link1 = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link1) {
    die('Could not connect: '.mysqli_error());
}

$db_selected = mysqli_select_db($link1, DB_NAME);


if (!$db_selected) {
    die('Can\'t use' . DB_NAME . ': ' . mysqli_error());
}
//when pressed submit
if (isset($_POST['replySubmit'])) {
//buton ve textarea def
$deger = $_POST ['replyComments'];
$deger2 = $_POST ['replyNickName'];
$deger3 = $_FILES ['replyUserFile']['name'];
// WANT TO DEFINE THREAD ID HERE
//deger4 = $_POST [];
// SEND TO DATABASE
$sql1 = "INSERT INTO newReply (COMMENT, NAME, IMAGENAME) VALUES ('$deger', '$deger2', '$deger3')";
//connection check
if (!mysqli_query($link1, $sql1)) {
    die('Error: ' . mysqli_error());
} else {
    header('Location: ./thread.php');
}
}
?>
<?php

if(isset($_FILES['replyUserFile'])) {
$uploadName1 = $_FILES['replyUserFile']['name'];
$uploadTmp1 = $_FILES['replyUserFile']['tmp_name'];
$uploadType1 = $_FILES['replyUserFile']['type'];

// CORRECTION
$uploadName1 = preg_replace("#[^a-z0-9.,]#i", "_", $uploadName1);
// FILES TO directory
if(!$uploadTmp1) {
    die("can't send...");
} else {
    move_uploaded_file($uploadTmp1, "./images/$uploadName1");
}

$link1 = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link1) {
    die('Could not connect: '. mysqli_error());
}

$db_selected1 = mysqli_select_db($link1, DB_NAME);


if (!$db_selected1) {
    die('Can\'t use' . DB_NAME . ': ' . mysqli_error());
}
//INSERT INTO tables
$sql1 = "INSERT INTO images (USERIMAGENAME) VALUES ('$uploadName1')";
//connection check
if (!mysqli_query($link1, $sql1)) {
    die('Error: ' . mysqli_error());
} else {
// CHANGE THE NAME OF THE IMAGE FILE IN THE DIRECTORY TO DATABASE ID NUMBER
    $last_id = mysqli_insert_id($link1);
    $ext1 = pathinfo("./images/$uploadName1", PATHINFO_EXTENSION);
    rename("./images/$uploadName1", "./images/$last_id".".".$ext1);
    // GO BACK TO THREAD
    header('Location: ./thread.php');
}
}
mysqli_close($link1);
?>

2 tables

最佳答案

我想知道为什么其他人建议您在想要获取 thread_id 时使用 mysqli_insert_id()。据我所知,mysqli_insert_id() 将返回最后一个 mysql 查询成功插入的 id。

但是在这里,当我检查你的代码时,你并没有在这里创建线程。这是已经(较早)创建的东西。

您想要完成的是(据我了解),您希望将“thread_id”存储在“评论”表中作为该评论发布的线程的引用,对吗?

我的建议是在您的评论表单中使用隐藏字段并将 thread_id 传递到提交页面。

然后您也可以检索“thread_id”,就像您获取 replyNickname、replyComment 等一样。

然后,在您的查询中使用该“thread_id”。

例如:

//when pressed submit
if (isset($_POST['replySubmit'])) {
//buton ve textarea def
$deger = $_POST ['replyComments'];
$deger2 = $_POST ['replyNickName'];
$deger3 = $_FILES ['replyUserFile']['name'];
// WANT TO DEFINE THREAD ID HERE
$thread_id = $_POST ['thread_id']; // Note this line

//deger4 = $_POST [];
// SEND TO DATABASE
$sql1 = "INSERT INTO newReply (COMMENT, NAME, IMAGENAME, THREAD_ID) VALUES ('$deger', '$deger2', '$deger3', '$thread_id')";
//connection check
if (!mysqli_query($link1, $sql1)) {
    die('Error: ' . mysqli_error());
} else {
    header('Location: ./thread.php');
}
}

希望我的理解是正确的。这只是一个粗略的想法,您可以随心所欲地传递 thread_id。但我看不出在这里使用 mysqli_insert_id() 有任何意义。

关于php - 如何从 "threads"表上相关线程的行中检索自动递增编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004612/

相关文章:

mysql - cPanel 用户从 Digital Ocean VPS 开始

php - Prestashop 1.7 手动升级 SqlTranslationLoader.php 错误

sql - 我正在写一个 mysql 查询。帮帮我

mysql - SQLite 和 MySQL 中使用 Unicode 代码点的 SQL 查询

php - RSA 安卓加密/RSA PHP 解密

mysql - 当mysql中有where子句时,如何选择前几行?

php - 解释基本的PHP Socket服务器代码

php - 查找多列中的重复行

php - 通过php将数据导入mysql

php - 完全开源的网站