-1

私はphpの初心者です。多対多の関係を持つ2つのテーブルと、関係用の別のテーブルがあります。

ここに画像の説明を入力

外部テーブルを更新するたびに、エラーが発生します:

Cannot add or update a child row: a foreign key constraint fails (`wikiseda`.`genre_singer`, CONSTRAINT `genre_singer_ibfk_1` FOREIGN KEY (`f_singer_id`) REFERENCES `singers` (`singerid`) ON DELETE CASCADE ON UPDATE CASCADE);

これは私のコードです:

<?php
include('../db_inc.php');
define("UPLOAD_DIR",realpath(dirname(__FILE__)));

$singer_name =$_POST['singer_name'];
$singer_gender=$_POST['singer_gender'];
$singer_des=$_POST['singer_description'];
$singer_genre=$_POST['genre_list'];

    $path = UPLOAD_DIR .'/musics/'.$singer_name;
    if(!file_exists($path)){
        mkdir($path,0777,true);
        }

$sql ="INSERT INTO singers(singer_name,singer_gender,singer_description) VALUES ('$singer_name','$singer_gender','$singer_des')" ;
 $singer_id = mysql_insert_id();
$sql2 =("INSERT INTO genre_singer(f_singer_id,f_genre_id) VALUES ('$singer_id','$singer_genre')");

$result=mysql_query($sql)or die(mysql_error());
$result2=mysql_query($sql2)or die(mysql_error());
if('$result'){
    echo "insert successfully"; 

    };
?>
4

3 に答える 3

2

実際に挿入する前に、挿入されたレコードの ID を取得しようとしています。

最初のクエリ実行を移動する必要があります - $result=mysql_query($sql)or die(mysql_error());before $singer_id = mysql_insert_id();

また:

  1. コードは SQL インジェクションに対して脆弱です (他の人が指摘したように)。

  2. ユーザーから取得した任意のパス/名前でサーバー上にディレクトリを作成することは、おそらく悪い考えです。それに続いて同様の方法でファイルを作成すると、すべてのユーザーがサーバー上で任意のコードを実行できるようになります。

于 2013-11-08T15:45:06.337 に答える