Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:_Php_Mysql_Database - Fatal编程技术网

Php 致命错误:未捕获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\

在实现一个项目的过程中我遇到了这个问题,你能帮我吗 致命错误:未捕获PDOException:SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(
bdd\u sql
publications
,constraint
publications\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)