首页 > 解决方案 > 在不同的表中插入数据

问题描述

我试图将数据添加到 MySQL 中的不同表中,但在运行我的代码时,它向我显示一个错误是“致命错误:未捕获的错误:调用成员函数 query()”,是第一次使用查询功能,所以我不知道出了什么问题。

     <?php  
session_start();

$_SESSION['ID_user'];
$id = $_SESSION['ID_user'];
$name = $_POST['name'];
$company = $_POST['company'];
$password = $_POST['password'];
$password = password_hash($password, PASSWORD_DEFAULT); 


    if($name == "" && $password == "" && $company == "" ){
        return false;
    }
    else {
    require './conectar.php';
    $resultset = $conn->prepare("SELECT * FROM user WHERE ID_user = '$id' LIMIT 1");
    $resultset->execute();
    $resultkey = $resultset->fetch();

    if($resultkey !== false) {

        $update = "UPDATE user SET Name_user='$name', password='$password' WHERE ID_user = '$id' LIMIT 1";
        $up = $conn->prepare($update);
        $up->bindParam(':name', $_POST['name'], FILTER_SANITIZE_SPECIAL_CHARS);
        $up->execute();
        $result = $up->fetch();
        $_SESSION['Name_user'] = $result['name'];

        $lastid = $conn->query("SELECT last_insert_id()")->fetch();

        $insert = "INSERT INTO rel_company_user (ID_user)  VALUES ('$id')";
        $in = $conn->prepare($insert);
        $in->execute();


        $insert = "INSERT INTO company (Name_company) VALUES ('$company')";
        $in = $conn->prepare($insert);
        $in->execute();


        $update = "UPDATE rel_company_user SET ID_company='$lastid' WHERE ID_user = '$id' LIMIT 1";
        $up = $conn->prepare($update);
        $up->execute();

    }

}

header('Location: http://seth.com/dashboard?ftime=1');


/* Pedir el id y actualizarlo */


?>

标签: phpmysql

解决方案


  1. 您应该在所有查询中使用参数。bindParam()如果您没有在查询中放置占位符,则无法使用。
  2. FILTER_SANITIZE_SPECIAL_CHARS 不是bindParam(). 第三个参数是可选的数据类型。
  3. 你永远不会在$thelast任何地方设置,应该是$conn
  4. 如果$id已分配,则不能使用LAST_INSERT_ID()get ID_user。只需将该值插入user表中。
  5. 您无需执行查询即可获取最后一个插入 ID。只需在下一个查询LAST_INSERT_ID()的列表中使用。VALUESINSERT
  6. 您无法获取UPDATE查询的结果。
  7. 如果您没有进行插入,则无法获得最后一个插入 ID。查询UPDATE user应该是.INSERT INTO user
  8. 在几个地方你分配了 SQL $insert,但后来做了$conn->prepare($update)
<?php  
session_start();

$id = $_SESSION['ID_user'];
$name = $_POST['name'];
$company = $_POST['company'];
$password = $_POST['password'];
$password = password_hash($password, PASSWORD_DEFAULT); 


if($name == "" && $password == "" && $company == "" ){
    return false;
}
else {
    require './conectar.php';
    $resultset = $conn->prepare("SELECT * FROM user WHERE ID_user = :id LIMIT 1");
    $resultset->bindParam(':id', $id);
    $resultset->execute();
    $resultkey = $resultset->fetch();

    if($resultkey !== false) {

        $update = "INSERT INTO user (ID_user, Name_user, password) VALUES (:id, :name, :password)";
        $up = $conn->prepare($update);
        $up->bindParam(':id', $id);
        $up->bindParam(':name', $name);
        $up->bindParam(':password', $password);
        $up->execute();
        $result = $up->fetch();
        $_SESSION['Name_user'] = $name;

        $insert = "INSERT INTO rel_company_user (ID_user)  VALUES (:id)";
        $in = $conn->prepare($insert);
        $in->bindParam(':id', $id);
        $in->execute();

        $insert = "INSERT INTO company (Name_company) VALUES (:company)";
        $in = $conn->prepare($insert);
        $in->bindParam(':company', $company);
        $in->execute();

        $update = "INSERT INTO rel_company_user (ID_company, ID_user) VALUES (LAST_INSERT_ID(), :id)";
        $up = $conn->prepare($update);
        $up->bindParam(':id', $id);
        $up->execute();

    }

}

header('Location: http://seth.com/dashboard?ftime=1');

/* Pedir el id y actualizarlo */
?>

推荐阅读