【发布时间】:2013-07-27 06:13:34
【问题描述】:
对sql、php、pdo 非常陌生,我正在尝试为现有帐户在我的项目表中执行插入语句,但它一直失败。我看不出哪里出错了。
这是结构
帐户表
id = pk
项目表
id = pk
account_id = fk
项目名称 = varchar(100)
pm = varchar(100)
apm = varchar(100)
est_start = 日期
est_end = 日期
联系人 = varchar(100)
project_status = varchar(100)
cmets=文本
所有相关字段都是 utf8_unicode_ci 排序规则
XAMPP 服务器上的 innodb mySQL db 的限制设置为级联。
php/pdo
<?php
include "$_SERVER[DOCUMENT_ROOT]/core/init.php";
if (empty($_POST) === false) {
$fk = '';
$title = $_POST['title'];
try {
$query_get_id = $db->prepare("
SELECT accounts.id
FROM accounts
WHERE accounts.account_name = ?
");
$query_get_id->bindValue(1, $title, PDO::PARAM_STR);
$query_get_id->execute();
$count = $query_get_id->rowCount();
if ($count > 0) {
while ($row = $query_get_id->fetch(PDO::FETCH_ASSOC)) {
$fk = $row['id'];
}
}
} catch(PDOException $e) {
die($e->getMessage());
}
$pn = $_POST['project_name'];
$ppm = $_POST['project_pm'];
$papm = $_POST['project_apm'];
$pc = $_POST['project_contact'];
$pes = $_POST['project_est_start'];
$pee = $_POST['project_est_end'];
$ps = $_POST['project_status'];
$pcom = $_POST['project_comments'];
try {
$query_ip = $db->prepare('INSERT INTO projects (account_id, project_name, pm, apm, est_start, est_end, contact, project_status, comments) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)');
$query_ip->bindValue(1, $fk, PDO::PARAM_STR);
$query_ip->bindValue(2, $pn, PDO::PARAM_STR);
$query_ip->bindValue(3, $ppm, PDO::PARAM_STR);
$query_ip->bindValue(4, $papm, PDO::PARAM_STR);
$query_ip->bindValue(5, $pes, PDO::PARAM_STR);
$query_ip->bindValue(6, $pee, PDO::PARAM_STR);
$query_ip->bindValue(7, $pc, PDO::PARAM_STR);
$query_ip->bindValue(8, $ps, PDO::PARAM_STR);
$query_ip->bindValue(9, $pcom, PDO::PARAM_STR);
$query_ip->execute();
echo 'Project Created';
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'project creation failed';
}
?>
这并没有吐出任何错误,但我感觉我没有正确设置 fk,因此 db insert 失败。
如果您需要更多信息,请尽管询问,即使包含所有代码/信息,我也会尽量保持简短和甜蜜。任何帮助表示赞赏。
编辑
我现在在更新我的代码后发现了这个错误
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`fsi`.`projects`, CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\xampp\htdocs\include\fill_project.php:50 Stack trace: #0 C:\xampp\htdocs\include\fill_project.php(50): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\include\fill_project.php on line 50
第 50 行是使用此代码执行语句的位置
$query_ip->execute();
我太新了,无法完全理解这个错误。我的猜测是我的第一个怀疑是正确的,我没有正确设置我的 fk。我说的对吗?
也只是一个参考,我在插入之前回显了我的变量,它们都已设置,没有一个为空,如果有人想知道的话。
【问题讨论】:
-
您是否检查了列的非空属性?如果任何列属性不为 null .. 并且如果您尝试插入 null 这将是一个问题
-
@PrabhakarManthena 它对所有列都说 null“否”,如果这就是你的意思
-
是的。 1st 在插入之前打印完整的值。然后你可以看到确切的问题。
-
如果有空值说明问题。
-
@PrabhakarManthena 是的,这个插入语句中没有列出几列,所以我需要在我的插入语句中声明它们并在其中输入 null 或 0?或者你的意思是我的任何变量是否为空