【发布时间】:2013-11-20 16:16:03
【问题描述】:
我是 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";
};
?>
【问题讨论】:
-
请切换到prepared statements以防止SQL injection。
-
没关系,但我的问题是另一回事
-
你确实有一个不同的错误,是的,但这并不好。 mysql_ 函数已被弃用,您的代码容易受到 sql 注入的影响。这是一个比你的小 sql 错误更严重的问题。
-
对于错误本身,请确保在执行查询之前您具有有效的 $singer_id 和 $singer_genre。它们必须是分别对应于歌手和流派表中的行 ID 的数值。
-
SQL 注入很糟糕,很常见但很糟糕......但我认为我以前从未见过
mkdir()将 0777 权限嵌入到 PHP 中,这是一个新的可怕水平 - 希望是Apache/PHP 用户甚至没有权限执行此操作...尤其是因为它似乎正在 Web 树中创建一个目录。