Php 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:
在实现一个项目的过程中我遇到了这个问题,你能帮我吗 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(Php 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:,php,mysql,database,Php,Mysql,Database,在实现一个项目的过程中我遇到了这个问题,你能帮我吗 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(bdd\u sqlpublications,constraintpublications\u ibfk\u 1外键(auteur)引用usiateurs(id)在C:\xampp\htdocs\mini_projet\class.php:107堆栈跟踪:#0 C:\xampp\htdocs\mini_projet\
bdd\u sql
publications
,constraintpublications\u ibfk\u 1
外键(auteur
)引用usiateurs
(id
)在C:\xampp\htdocs\mini_projet\class.php:107堆栈跟踪:#0 C:\xampp\htdocs\mini_projet\class.php(107):PDO->query('INSERT INTO pub…'))#1 C:\xampp\htdocs\mini_projet\transformation.php(24):连接->查询('INSERT INTO pub…'))#2{main}在C:\xampp\htdocs\mini#projet\class.php第107行抛出
编写php代码
<?php
session_start();
require 'class.php';
$id = $_GET['id'] ?? "";
$contenu = $_GET['contenu'] ?? "";
$auteur = $_GET['auteur'] ?? "";
$categorie = $_GET['categorie'] ?? "";
$A = $pdo->query("SELECT id From publications where id= ' " .$id. "' " );
$A->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Publication');
$B = $A->fetch();
if ($B == TRUE) {
$A = $pdo->query("UPDATE publications SET contenu = '".$contenu."', auteur = '".$auteur."', categorie_id = '".$categorie."' WHERE id = '".$id."' ");
}
else
{
$A = $pdo->query("INSERT INTO publications VALUES ('".$id."','".$contenu."','".$auteur. "', '". $categorie ."')");
}
header('Location: publication.php');
?>
为了防止SQL注入,建议您永远不要在连接中直接使用变量,并且可以将其用作密钥值,以防止受到某些攻击。像这样:
$id = 10;
$sql = "SELECT * FROM tests WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(':id'=>$id)
您似乎正在使用MySQL—在这种情况下,请删除SQL Server标记。此代码易受SQL注入攻击,因此仅使用带有参数的准备语句。请参阅和,以解决您的问题$auteur。和$在插入新行之前,数据库中必须存在categorie。我解决了问题
问题在于外键完整性约束的定义。我想如果我们在ON DELETE或ON UPDATE子句中定义NOACTION,它将具有与RESTRICT相同的含义。我将设置为空
$id = 10;
$sql = "SELECT * FROM tests WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(':id'=>$id)