、を初めて使用しsql
、既存のアカウントのプロジェクト テーブルに挿入ステートメントを実行しようとしていますが、何度も失敗します。どこが間違っているのかわかりません。php
pdo
ここに構造があります
アカウント テーブル
ID = pk
プロジェクト テーブル
id = pk
account_id = fk
project_name = varchar(100)
pm = varchar(100)
apm = varchar(100)
est_start = date
est_end = date
contact = varchar(100)
project_status = varchar(100)
comments= text
関連するすべてのフィールドは utf8_unicode_ciです。 XAMPP サーバー上の
innodb db では、照合制限がカスケードに設定されています。mySQL
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 の挿入が失敗しています。
さらに情報が必要な場合は、質問してください。すべてのコード/情報があっても、簡潔でわかりやすいものにしようとしました。どんな助けでも大歓迎です。
編集
コードを更新した後、このエラーが見つかりました
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ではありません。