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

时间:2014-02-01 06:16:28

标签: php mysql sql database

我遇到问题,检查我输入的数据是否已经存在于数据库表中,如果没有,则将其插入表中。我无法弄清楚的是如何获取刚刚插入数据库的数据的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) {

3 个答案:

答案 0 :(得分:3)

NOT EXISTS关键字可以提供帮助:

docs

  

如果子查询返回任何行,   EXISTS子查询为TRUE,而不是   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个,意味着:

  • 一个请求到db-server而不是两个
  • 减少流量
  • 更多表现

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

您的选择查询中存在错误

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

您需要像这样添加'

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

,则

varchar

编辑II

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

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

答案 1 :(得分:0)

你可以在单个文件中自己做..

insert_interest.php中,您可以使用

获取最近插入的数据ID
$insert_query = mysql_query($insert_sql);
$id = mysql_insert_id($insert_query);
// Write your second table insert code here

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

答案 2 :(得分:0)

首先使用mysqli而不是mysql

还有一个错误

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

使用

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