【发布时间】:2011-09-08 22:20:34
【问题描述】:
背景:
我正在将客户的基本信息从客户表单上传到数据库。当客户点击“完成”时,输入的信息,例如 (Name、City、Country 等) 将存储在 client_info 表。
作为替代方案,客户端也可以将图像上传到服务器。然后将这些图像的信息(image_path、image_name)存储在另一个名为 client_images 的单独表中,该表具有 外键 与 client_info 相关联。
client_info 表:
CREATE TABLE IF NOT EXISTS `client_info` (
`client_id` int(11) NOT NULL AUTO_INCREMENT,
`client_name` varchar(100) NOT NULL,
`client_city` varchar(100) NOT NULL,
`client_country` varchar(10) NOT NULL,
PRIMARY KEY (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10446 ;
client_images 表:
CREATE TABLE IF NOT EXISTS `client_images` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_path` varchar(100) NOT NULL,
`image_name` varchar(100) NOT NULL,
`client_id` int(11) NOT NULL,
PRIMARY KEY (`image_id`),
KEY `client_id` (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=415;
问题:
我已成功将一行上传到 client_images 表。添加多于一行会导致以下错误:
Cannot add or update a child row: a foreign key constraint fails (`db`.`client_images`, CONSTRAINT `client_images_ibfk_1` FOREIGN KEY (`client_id`) REFERENCES `client_info` (`client_id`) ON DELETE CASCADE ON UPDATE CASCADE) : 1452
但是,当我通过控制台添加多行和已经存在的 client_id 对其进行测试时,它运行良好。
例子:
mysql> INSERT INTO client_images (image_path, image_name, client_id) VALUES ('pathname1', 'name1', 10241);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO client_images (image_path, image_name, client_id) VALUES ('pathname2', 'name2', 10241);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO client_images (image_path, image_name, client_id) VALUES ('pathname3', 'name3', 10241);
Query OK, 1 row affected (0.00 sec)
我需要指出,我是这样排列的:
文件:(create_article.php)
insert_client_info($client_name, $client_city, $client_country);
include('uploads.php');
?>
<?php mysql_close($connection); ?>
在 uploads.php 内我有一个 foreach 循环,用于计算要上传的文件数量,在循环结束时我目前有一个函数 insert_images($image_path, $image_name);
功能(插入图像):
function insert_images($directory_path, $image_name) {
global $connection;
$client_id=mysql_insert_id();
$query = "INSERT INTO client_images (
image_path, image_name, client_id
) VALUES (
'{$directory_path}', '{$image_name}', '{$client_id}'
)";
$result = mysql_query($query, $connection);
if ($result) {
// Success!
echo "<p></p>";
echo "Successfully uploaded the file.";
echo "<p></p>";
} else {
// Display error message.
echo "<p>" . mysql_error() ." : ".mysql_errno(). "</p>";
}
return $result;
}
阅读其他类似问题我知道致命弱点可能是 mysql_insert_id() 并且不知何故它使用了与 foreach 循环中的第一个不同的另一个连接,因此导致得到前面提到的 MYSQL 错误。
谢谢 / EDZ
【问题讨论】: