繁体   English   中英

MySQL / PHP检查数据是否在数据库表中,如果没有插入

[英]MySQL/PHP check if data is in database table, if not insert it

我在检查输入的数据是否已经在数据库表中以及是否没有将其插入表中时遇到问题。 我无法弄清楚的是如何获取刚插入数据库的数据的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关键字可以帮助您:

文档

如果子查询根本返回任何行,则EXISTS子查询为TRUE,而NOT EXISTS子查询为FALSE。 例如:

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 = " . $interest;

您需要这样添加'

...name = '". $interest . "'";如果name是一个varchar

编辑二

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

务必阅读为什么我应该在PHP中使用mysql_函数?

您可以在单个文件中执行此操作。

insert_interest.php ,您可以使用来获取最近插入的数据ID。

$insert_query = mysql_query($insert_sql);
$id = mysql_insert_id($insert_query);
// Write your second table insert code here

通过使用ID,您可以将数据插入第二张表。

首先使用mysqli代替mysqli

也有错误

 $get_interests = "SELECT COUNT(*) AS cnt FROM interests WHERE name = " . $interest;

采用

 $get_interests = "SELECT COUNT(*) AS cnt FROM interests WHERE name = '".$interest."'";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM