입력 한 데이터가 이미 데이터베이스 테이블에 있는지 확인하고 테이블에 삽입하지 않는지 확인하는 데 문제가 있습니다. 내가 알아낼 수없는 것은 데이터베이스에 방금 삽입 된 데이터의 ID (기본 및 자동 증가)를 얻는 방법입니다.
데이터베이스에 아직없는 경우 삽입 할 수 없다고 생각한 다음 해당 데이터의 ID를 모두 동일한 스크립트에서 다른 테이블에 삽입 할 수 있습니다. 그래도 나는 틀릴 수 있습니다. 그래서 내가 지금 가지고있는 것은 이미 삽입되었는지 확인하고 그렇지 않은 경우 삽입 한 다음 정보의 ID를 얻기 위해 다른 PHP 스크립트로 리디렉션하는 하나의 스크립트입니다.
나는 이것에 많은 오류가 있습니다. 데이터베이스에 있어도 삽입하고 두 번째 스크립트로 리디렉션되면 서버 오류가 발생합니다. 어떤 도움이라도 좋을 것입니다. 미리 감사드립니다!
편집 : 두 파일을 하나로 교체 했는데 새 코드는 다음과 같습니다. 그래도 여전히 문제가 발생합니다. 관심 목록이있는 첫 번째 테이블에 중복 된 관심사가 삽입됩니다.
<?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 (...,...)"
이렇게하면 2 대신 1 개의 쿼리 만 수행하므로 다음을 의미합니다.
편집 됨 (질문과 직접 관련이 없음)
선택 쿼리에 오류가 있습니다.
"SELECT COUNT(id) AS cnt FROM interests WHERE name = " . $interest;
다음 '
과 같이 추가해야합니다 .
...name = '". $interest . "'";
이름이 varchar
편집 II
mysql_
더 이상 함수를 사용하면 안됩니다 !
PHP에서 mysql_ 함수를 사용하지 않는 이유를 읽으십시오 . !
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다