2016-11-22 29 views
2

HTMLページのフォーム値をPHPでデータベースに挿入しましたが、これを別のテーブルに結合する必要があります。 1つのクエリによってアドレステーブルに値が挿入され、これが機能します。アドレス照会からMAXID値を引いた後、それを使用して他の値を 'staff'表に入力する必要があります。スタッフテーブルクエリをコメントアウトすると、それが動作します。コードがアクティブであるとき、私はこのエラーを取得:PHP/MySQLに値を挿入する際の外部キー制約エラー

Could not successfully run query (INSERT INTO staff (first_name, last_name, address_id, email, store_id) VALUES ('Hunter', 'Norman', '', '[email protected]', '2')) from sakila: Cannot add or update a child row: a foreign key constraint fails (sakila . staff , CONSTRAINT fk_staff_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON UPDATE CASCADE)

私は、以前連想インデックスを修正するために役立ったが、それでもエラーがありました。コードは次のとおりです:

$maxQuery = "SELECT MAX(address_id) FROM address"; 
    $result = mysqli_query($connect, $maxQuery); 
    $row = mysqli_fetch_assoc($result); 
    if (!$result) 
    { 
     die("Could not successfully run query ($userQuery) from $db: " .  
     mysqli_error($connect)); 
    } 
    else 
    { 

     print ("<p>Max Address ID:".$row['MAX(address_id)']."</p>"); 

    } 




    $userQuery1 = "INSERT INTO staff (first_name, last_name, address_id,  email, store_id) 
      VALUES ('$first_name', '$last_name', '{$row[MAX(address_id)]}', '$email', '$store_id')"; 
    $staffResult = mysqli_query($connect, $userQuery1); 
    if (!$staffResult) 
    { 
     die("Could not successfully run query ($userQuery1) from $db: " . 
     mysqli_error($connect)); 
    } 
     else 
    { 
    print(" <h1>New Staff Record Added!</h1>"); 
    print ("<p>The following record was added:</p>"); 
    print("<table border='0'> 
      <tr><td>First Name</td><td>$first_name</td></tr> 
      <tr><td>Last Name</td><td>$last_name</td></tr> 
      <tr><td>Email</td><td>$email</td></tr>  
      <tr><td>Store ID</td><td>$store_id</td></tr> 
      <tr><td>Address</td><td>$address</td></tr> 
      <tr><td>City</td><td>$city</td></tr> 
      <tr><td>District</td><td>$district</td></tr> 
      <tr><td>Postal Code</td><td>$postal_code</td></tr> 
      <tr><td>Phone</td><td>$phone</td></tr> 
      </table>"); 
}  
+0

実際に住所の有効な値を受け取っていることを確認しましたか?アドレステーブルには何も含まれていますか?印刷された最大アドレスIDは何ですか? –

+0

はい、アドレステーブルには既に600以上のレコードがあります。私はテストとしてフォームを提出していますが、アドレスの挿入クエリだけで増分を続け、データベースにはフォームが反映されます。私がスタッフの部分をコメントアウトしてMAX(address_id)を印刷すると、644,645が印刷されます。 –

+0

を提出するたびに、私はこれをupvotedしました。 – Drew

答えて

1

あなたが配列にアクセスするときにいくつかの引用符がありません。また、FKが数値であると仮定すると、クエリの引用符は不要です。

それは次のようになります。

$userQuery1 = "INSERT INTO staff (first_name, last_name, address_id, email, store_id) VALUES ('$first_name', '$last_name', {$row['MAX(address_id)']}, '$email', '$store_id')"; 

ヒント:var_dump()$userQuery1あなたはそれが実行されているものを見るなります。また、PHPの警告がオンになっている場合は、PHPのmax()関数を定数(文字列:address_id)と一緒に実行しようとしていることがわかります。

+0

にSQLを変換してください。 –

+0

彼を助けるための素晴らしい仕事のフィール・ラビン – Drew

関連する問題