2013-02-13 45 views
0

我有一个数据库中的两个表:脚本更新子表停止所有其他更新

  • Employee_info(存储所有员工信息)和

  • Job_Info(存储中的所有职务,职位描述)。

的代码插入数据,没有任何问题,但是更新这个错误时,浏览器上显示:

不能添加或更新子行,外键约束失败 (Employee_database.job_info ,约束job_info_ibfk_4 FOREIGN KEY (EMPLOYEE_ID)参考文献Employee_info(EMPLOYEE_ID)ON UPDATE CASCADE )

我无法得到的0值为更新子表或可能是什么问题?

下面是代码

$query = "SELECT * FROM `Employee_info` WHERE `Name_Of_Employee` = '$Name'"; 
    $sqlsearch = mysql_query($query); 
     $resultcount = mysql_numrows($sqlsearch); 
     if ($resultcount > 0) 
      { 
       $row=mysql_fetch_assoc ($sqlsearch); 
       $Employee_Id= $row['Employee_Id']; 
       mysql_query("UPDATE `employee_info` SET `Name_Of_Employee` = '$Name', 

            `Physical_Address` = '$P_Address', 

            `Phone_Number` = '$Phone', 

            `Email_Address` = '$E_Address' 
       WHERE `Name_Of_Employee` = '$Name'" 
      ) 
      or die(mysql_error()); 
      } 
      else { 
       $sql="INSERT INTO employee_info 
        (
         Name_Of_Employee, 
         Physical_Address, 
         Phone_Number, 
         Email_Address 
        ) 
       VALUES (
        '$Name', 
        '$P_Address', 
        '$Phone', 
        '$E_Address' 
         )"; 
         if(!mysql_query($sql)) 
         {  
         die('cannot store in employee_info'.mysql_error()); 
         } 
        } 

     $Employee_Id=mysql_insert_id(); 
     $qry = "SELECT * FROM `Job_info` WHERE `Job_Title` = '$Job_Title'"; 
      $sqlsearch = mysql_query($query); 
      $resultcount = mysql_numrows($sqlsearch); 
       if ($resultcount > 0) { 
             "UPDATE `Job_info` SET `Employee_Id` = '$Employee_Id' , 
               `Job_Title` = '$Job_Title', 
               `Job_Description` = '$Job_Description' 

             WHERE `Employee_Id` = '$Employee_Id'") 
             or die(mysql_error()); 
            } 
       else 
        { 
         $sql="INSERT INTO ad_info (
                Employee_Id, 
                Job_Title, 
                Job_Description 
               ) 
             VALUES (
               '$Employee_Id', 
               '$Job_Title', 
               '$Job_Description' 
               )"; 
         if(!mysql_query($sql)) 
         { 
               die('cannot store in job info'.mysql_error());} 




               } 

这里是DATABSE设计

+------------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+------------------+-------------+------+-----+---------+----------------+ 
| Employee_Id  | int(11)  | NO | PRI | NULL | auto_increment | 
| Name_Of_Employee | varchar(20) | NO |  |   |    | 
| Physical_Address | varchar(25) | NO |  |   |    | 
| Phone_Number  | int(14)  | NO |  |   |    | 
| Email_address | varchar(25) | NO |  |   |    |        | 
+------------------+-------------+------+-----+---------+----------------+ 

+------------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+------------------+-------------+------+-----+---------+----------------+ 
| jOB_Id   | int(11)  | NO | PRI | NULL | auto_increment | 
| Employee_Id  | int(11)  | NO |  |   |    | 
| Job_Title  | varchar(25) | NO |  |   |    | 
| Job_Description | text(100) | NO |  |   |    | 
+------------------+-------------+------+-----+---------+----------------+ 

回答

0

的问题是,更新$ EMPLOYEE_ID时是空的。看他们你没有设置它。

你的代码应该是:

$query = "SELECT * FROM `Employee_info` WHERE `Name_Of_Employee` = '$Name'"; 
$sqlsearch = mysql_query($query); 
$resultcount = mysql_numrows($sqlsearch); 
if ($resultcount > 0) 
{ 
    $row=mysql_fetch_assoc ($sqlsearch); 
    $Employee_Id= $row['Employee_Id']; 
      mysql_query("UPDATE `employee_info` SET `Name_Of_Employee` = '$Name', 

           `Physical_Address` = '$P_Address', 
           `Phone_Number` = '$Phone', 
           `Email_Address` = '$E_Address' 
      WHERE `Name_Of_Employee` = '$Name'" 
     ) 
     or die(mysql_error()); 
     } 
     else { 
      $sql="INSERT INTO employee_info 
       (
        Name_Of_Employee, 
        Physical_Address, 
        Phone_Number, 
        Email_Address 
       ) 
      VALUES (
       '$Name', 
       '$P_Address', 
       '$Phone', 
       '$E_Address' 
        )"; 
      if(!mysql_query($sql)) 
      {  
        die('cannot store in employee_info'.mysql_error()); 
      } 
      $Employee_Id=mysql_insert_id(); 
    } 


    $qry = "SELECT * FROM `Job_info` WHERE `Job_Title` = '$Job_Title'"; 
     $sqlsearch = mysql_query($query); 
     $resultcount = mysql_numrows($sqlsearch); 
      if ($resultcount > 0) { 
            "UPDATE `Job_info` SET `Employee_Id` = '$Employee_Id' , 
              `Job_Title` = '$Job_Title', 
              `Job_Description` = '$Job_Description' 

            WHERE `Employee_Id` = '$Employee_Id'") 
            or die(mysql_error()); 
           } 
      else 
       { 
        $sql="INSERT INTO ad_info (
               Employee_Id, 
               Job_Title, 
               Job_Description 
              ) 
            VALUES (
              '$Employee_Id', 
              '$Job_Title', 
              '$Job_Description' 
              )"; 
        if(!mysql_query($sql)) 
        { 
              die('cannot store in job info'.mysql_error());} 




              } 
+0

感谢它为只更新则不会完全地更新 – 2013-02-13 10:09:51

+0

你的意思是,它并没有完全更新? – 2013-02-13 12:58:57

0

是的,你需要得到来自parenttable雇员ID,以便更新子表 为你使用到子表的更新语句。

加入这行代码,然后再执行:

$query = "SELECT * FROM `Employee_info` WHERE `Name_Of_Employee` = '$Name'"; 
$sqlsearch = mysql_query($query); 
$resultcount = mysql_numrows($sqlsearch); 
if ($resultcount > 0) 
{ 
    $row=mysql_fetch_assoc ($sqlsearch); 
    $Employee_Id= $row['Employee_Id']; // add this line in your code here 

    ..... 
+0

只适用于少数插入,然后停止可能存在的问题 – 2013-02-13 10:10:56

+0

它只会更新empoyee_info表中存在的emp – user2001117 2013-02-13 10:23:21