簡體   English   中英

mysql php無法獲取外鍵值

[英]mysql php Cannot take foreign key value

您好,我的php代碼有問題。.招聘系統有3張桌子。

CREATE TABLE IF NOT EXISTS `members` (
   `uid` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
   `password` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
   `cpassword` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
   `email` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
   `role` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
   PRIMARY KEY (`uid`)'
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ;   

候選表:

CREATE TABLE IF NOT EXISTS `candidate` (
  `fullname` varchar(35) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `webpage` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `tel` int(35) NOT NULL,
  `nationality` varchar(35) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `position` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `interviewed` varchar(30) NOT NULL DEFAULT 'No',
  `rating` varchar(30) NOT NULL,
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  PRIMARY KEY (`c_id`),
  KEY `uid` (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=135 ;

學術表:

CREATE TABLE IF NOT EXISTS `academic_candidate` (    
    `degree` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `exp_years` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `comment1` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `proposed_positions` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `research_years` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `comment2` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `department` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
    `a_id` int(25) NOT NULL AUTO_INCREMENT,
    `uid` int(11) NOT NULL,
    `c_id` int(11) NOT NULL,
    PRIMARY KEY (`a_id`),
    UNIQUE KEY `id` (`a_id`),
    KEY `uid` (`uid`),
    KEY `c_d` (`c_id`),
    KEY `c_id` (`c_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ;`

-表格academic_candidate約束

ALTER TABLE Academic_candidate ADD CONSTRAINT Academic_candidate_ibfk_1 FOREIGN KEY ( uid ) REFERENCES成員( uid ) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT Academic_candidate_ibfk_2 FOREIGN KEY ( c_id ) REFERENCES REQUEENCES ) ON DELETE CASCADE ON UPDATE CASCADE;候選( c_id ADE ) ON DELETE CASCADE ON UPDATE CASCADE;

-

-表candidate限制

ALTER TABLE候選者ADD CONSTRAINT候選者[ FOREIGN KEY ( uid ) REFERENCES成員( uid ) ON DELETE CASCADE ON UPDATE CASCADE;

-

現在,我使用此查詢來將值存儲在表格Academic_candidate中

session_start();

    $query = "SELECT * FROM academic_candidate WHERE degree = '$degree'";
$result = mysql_query($query);
$count  = mysql_num_rows($result);

if($count > 0){ 
    echo "You ALready complete the form </br>";
    header("Location:../candidate/candidate_index.php");
}
else{
        $degree =($_POST['degree']);
        $exp_years = ($_POST['exp_years']);
        $comment1 = ($_POST['comment1']);
        $proposed_positions = ($_POST['proposed_positions']);
    $research_years=($_POST['research_years']);
    $comment2=($_POST['comment2']);
    $department=($_POST['department']);

   $uid=($_SESSION['uid']);


    $query1 = "INSERT INTO academic_candidate

                (degree,exp_years,comment1,proposed_positions,research_years,comment2,department,uid,c_id)
                SELECT
                 '$degree','$exp_years','$comment1','$proposed_positions','$research_years','$comment2','$department','$uid','$c_id'
                    FROM  candidate         
                 WHERE  uid='$uid' AND c_id='$c_id'  ";


    $result = mysql_query($query1);

    if(!$result){
        echo "Error";
        die (mysql_error());                                          
    }   

    else{
        header("Location:../candidate/view_application.php");
    }

}

我的問題是將所有值存儲在表Academic_candidate表上,但c_id為0。 我該怎么做才能獲得候選人。c_id?

您正在將文字值傳遞給INSERT INTO語句。

考慮區別:

SELECT 'bar' FROM foo;

SELECT bar FROM foo;

這是有關SQLFiddle的演示。

查看您的查詢:

SELECT '$degree'

與以下內容不同:

SELECT degree

其中之一只是回顯您傳入的任何值,另一種實際上是從數據庫中選擇一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM