gpt4 book ai didi

php - MySQL/PHP 检查数据是否在数据库表中,如果不在则插入

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:26 25 4
gpt4 key购买 nike

我在检查我输入的数据是否已经在数据库表中时遇到问题,如果不在,则将其插入到表中。我想不通的是如何获取刚刚插入数据库的数据的 id(它是主要的和自动递增的)。

我不认为如果它不在数据库中就可以插入它,然后从同一个脚本中获取要插入到另一个表中的数据的 ID。我可能是错的。所以我现在有一个脚本来检查它是否已经插入,如果没有插入,然后重定向到另一个 php 脚本以获取信息的 id。

我遇到了很多错误,即使它在数据库中,它也会插入它,当它被重定向到第二个脚本时,我收到一个服务器错误。任何帮助都会很棒,提前致谢!

编辑:我用一个文件替换了两个文件,新代码如下。我仍然遇到问题,它在第一个表中插入了重复的兴趣和我的兴趣列表

<?php

require_once '../scripts2/app_config.php';
require_once '../scripts2/database_connection.php';
require_once '../scripts2/authorize.php';

session_start();

// Authorize any user, as long as they're logged in
authorize_user();

$user_id = $_SESSION['user_id'];

$interest = trim($_REQUEST['interest']);


$get_interests = "SELECT COUNT(*) AS cnt FROM interests WHERE name = " . $interest;
$query_interests = mysql_query($get_interests);
if($query_interests) {
$hjk = mysql_fetch_array($query_interests);
$cnt = $hjk['cnt'];
}
if($cnt < 1) {
// $num_interests = mysql_num_rows($query_interests);

// insert the interest if it is not already in the database
$insert_sql = sprintf("INSERT INTO interests " .
"(name) " .
"VALUES ('%s');",
mysql_real_escape_string($interest));


//insert the user into the database
$insert_query = mysql_query($insert_sql);
$id = mysql_insert_id();

// From the newly inserted interest get the id of the interest
$insert_user_interests = sprintf("INSERT INTO user_interests " .
"(user_profile_id, interest_id) " .
"VALUES (%d, %d);",
mysql_real_escape_string($user_id),
mysql_real_escape_string($id));

mysql_query($insert_user_interests);
//Redirect this user to the page that displays user information
$url = 'show_profile_user_interests.php';
header('Location: '. $url);
exit();
} else {
/* If the interest is already in the table, just insert the id of the interest and
user_profile_id */

$get_interests2 = "SELECT id FROM interests WHERE name = " . $interest;
$query_interests2 = mysql_query($get_interests2);
if($query_interests2) {
$hye = mysql_fetch_array($query_interests2);
$interest_id = $hye['id'];
}
$insert_user_interests = sprintf("INSERT INTO user_interests " .
"(user_profile_id, interest_id) " .
"VALUES (%d, %d);",
mysql_real_escape_string($user_id),
mysql_real_escape_string($interest_id));

mysql_query($insert_user_interests);

//Redirect this user to the page that displays user information
$url = 'show_profile_user_interests.php';
header('Location: '. $url);
exit();
}
?>

我认为导致主要问题的原因如下,但我可能错了...

$get_interests = "SELECT COUNT(id) AS cnt FROM interests WHERE name = " . $interest;
$query_interests = mysql_query($get_interests);
if($query_interests) {
$hjk = mysql_fetch_array($query_interests);
$cnt = $hjk['cnt'];
}
if($cnt > 0) {

最佳答案

NOT EXISTS 关键字可以帮助:

docs :

If a subquery returns any rows at all, EXISTS subquery is TRUE, and NOT EXISTS subquery is FALSE. For example:

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

在你的情况下:

"INSERT INTO user_interests
WHERE NOT EXISTS
(SELECT * FROM interests
WHERE name = '" . $interest . "')
(user_profile_id, interest_id)
VALUES
(...,...)"

或者走捷径

"INSERT INTO user_interests
IF NOT EXISTS name = '" . $interest . "'
(user_profile_id, interest_id)
VALUES (...,...)"

因为这样你只做 1 个查询而不是 2 个,意味着:

  • 对数据库服务器的一个请求,而不是两个
  • 减少流量
  • 更好的表现

已编辑(与问题没有直接关系)

您的选择查询有误

"SELECT COUNT(id) AS cnt FROM interests WHERE name = ". $兴趣;

你需要像这样添加':

...name = '". $interest . "'"; 如果名称是 varchar

编辑二

你真的不应该再使用 mysql_ 函数了!

请务必阅读 Why shouldn't I use mysql_ functions in PHP? !

关于php - MySQL/PHP 检查数据是否在数据库表中,如果不在则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21494828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com