PHP,MYSQL二级密钥

时间:2018-03-02 11:08:12

标签: php mysql

我无法理解我错了什么。 我正在创建一个Android应用程序,人们注册输入他们的电话号码,然后在另一个活动中输入姓名和姓名,注册完成。 问题是我有一个带有2个表的数据库,一个名为" Numbers" (字段是ID和电话号码)和表"客户" (字段是ID,Name,Surname和idNumbers_fk)。 我无法将数据保存在第二个表中,如何管理二级密钥? 从某种意义上说,你与"数字"的主键相关联。表,但我不能在ID字段中传递它的值。 我有一个PHP代码在表中插入数据,但我不明白为什么它不起作用。

你能帮助我吗?

这是我在db中的内容: 名称数据库:Test1 表格数量:2

表1:

  • NAME TABLE:Numbers
  • FIELDS:ID(PK)和Phone_number(VARCHAR(20))

表2:

  • NAME TABLE:Costumers
  • FIELDS:ID(PK),名称(VARCHAR(20)),姓氏(VARCHAR(20))和idNumbers_fk(外键)

这是我的电话号码注册PHP代码(可行):

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){

include 'Test1config.php';

 $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

 $Pnumber = $_POST['NumberPhone'];


 $CheckSQL = "SELECT * FROM Numbers WHERE Phone_number='$Pnumber'";

 $check = mysqli_fetch_array(mysqli_query($con,$CheckSQL));

 if(isset($check)){

 echo 'Number already registered';

 }
else{ 
$Sql_Query = "INSERT INTO Numbers (Phone_number) values ('$Pnumber')";

 if(mysqli_query($con,$Sql_Query))
{
 echo 'Registration Successfully';
}
else
{
 echo 'Something went wrong';
 }
 }
}
 mysqli_close($con);
?>

这是给我错误的PHP文件的代码,在这里我将数据插入&#34; Costumers&#34; table,但它给了我错误,但是如果我从&#34; Costumers&#34;中删除了外键。它有效的表,为什么?我哪里错了?

<?php

   if($_SERVER['REQUEST_METHOD']=='POST'){

       include_once("Test2congig.php");

        $first_name = $_POST['nameC'];
        $last_name = $_POST['surnameC'];


     if($first_name == '' || $last_name == '' ){
            echo json_encode(array( "status" => "false","message" => "Parameter missing!") );
     }else{

            $query= "SELECT * FROM Costumers WHERE Name='$first_name' AND Surname='$last_name'";
            $result= mysqli_query($con, $query);

            if(mysqli_num_rows($result) > 0){  
               echo json_encode(array( "status" => "false","message" => "User already exist!") );
            }else{ 
             $query = "INSERT INTO Costumers (Name,Surname) VALUES ('$first_name','$last_name')";
             if(mysqli_query($con,$query)){

                 $query= "SELECT * FROM Costumers ";
                         $result= mysqli_query($con, $query);
                     $emparray = array();
                         if(mysqli_num_rows($result) > 0){  
                         while ($row = mysqli_fetch_assoc($result)) {
                                     $emparray[] = $row;
                                   }
                         }
                echo json_encode(array( "status" => "true","message" => "Successfully registered!" , "data" => $emparray) );
             }else{
                 echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") );
            }
        }
                mysqli_close($con);
     }
     } else{
            echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") );
    }

 ?>

1 个答案:

答案 0 :(得分:1)

在您的Costumers表格中,将字段idNumbers_fk的默认值设为NULL。这样,当您不为此字段设置数据时,它将为NULL,这是可接受的外键值。

它失败的原因是默认情况下很可能插入0,而Numbers表中不存在id为0的电话号码。

然而,对您的问题的更广泛的答案是,您必须在应用中的某处保存电话号码的ID,以便当客户想要在之后添加姓名和姓氏时,您同时使用该电话ID。

像这样:

INSERT INTO Costumers (Name,Surname,idNumbers_fk) VALUES ('$first_name','$last_name', '$phoneNumberIdFromSomeSessionOrCache')

$phoneNumberIdFromSomeSessionOrCache是客户保存电话号码后需要存储的值...