我遇到问题,检查我输入的数据是否已经存在于数据库表中,如果没有,则将其插入表中。我无法弄清楚的是如何获取刚刚插入数据库的数据的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) {
答案 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个,意味着:
已编辑(与问题没有直接关系)
您的选择查询中存在错误
"SELECT COUNT(id) AS cnt FROM interests WHERE name = " . $interest;
您需要像这样添加'
:
...name = '". $interest . "'";
,则 varchar
编辑II
你真的不应该再使用mysql_
函数了!
答案 1 :(得分:0)
你可以在单个文件中自己做..
在insert_interest.php
中,您可以使用
$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."'";