2017-11-08 12 views
-1

このコードを実行すると、子行を追加または更新できません。外部キー制約は失敗します。 私はこれを修正する方法について助けが必要です。 include_once( 'config.php');外部キー制約が失敗しました

--first Table--

CREATE TABLE welfare_funeral(
welfare_id INT AUTO_INCREMENT PRIMARY KEY, 
Name VARCHAR(255), 
Date Date, 
Venue VARCHAR(255) 
)ENGINE= INNODB; 

- 第2 Table--

CREATE TABLE welfare_funeral_payees(
payee_id INT AUTO_INCREMENT PRIMARY KEY, 
Name VARCHAR(255), 
Amount VARCHAR(255), 
welfare_id INT, 
INDEX wel_id(welfare_id), 
FOREIGN KEY(welfare_id) REFERENCES welfare_funeral(welfare_id) 
)ENGINE=INNODB; 

--PHP Code--

if(isset($_POST['record'])){ 
    $payeeName = $_POST['payeeName']; 
    $amount = $_POST['amount']; 
    $welfare_id="SELECT MAX('welfare_id') FROM 'welfare_funeral'"; 

    $myd = $pdo->prepare('INSERT INTO welfare_funeral_payes(Name, Amount, welfare_id)VALUES(:upayeeName, :uamount, :uwelfare_id)'); 
    $myd->bindParam(':upayeeName', $payeeName); 
    $myd->bindParam(':uamount', $amount); 
    $myd->bindParam(':uwelfare_id', $welfare_id); 

    if($myd->execute()){ 
     ?> 
     <script> 
      alert("New Welfare created"); 
     </script> 
     <?php 
    }else{ 
     ?> 
     <script> 
      alert("Couln't not create Welfare"); 
     </script> 
     <?php 
    } 
} 
+0

準備された文でパラメータとして副選択を使用することはできません – Jens

答えて

0

あなたに副選択を置くことができませんprepared statementのパラメータ。

あなたは最初のIDを照会する必要があり、その後、あなたはPARAMTERとしてこれらを設定キャン、またはステートメントに直接副選択を書く:

$myd = $pdo->prepare('INSERT INTO welfare_funeral_payes(Name, Amount, welfare_id) SELECT :upayeeName,uamount, MAX(welfare_id) FROM welfare_funeral); 
    $myd->bindParam(':upayeeName', $payeeName); 
    $myd->bindParam(':uamount', $amount); 
    $myd->bindParam(':uwelfare_id', $welfare_id); 

また、カラム名とテーブル名ではない単一引用符arroundのバッククォートを使用

関連する問題