php - 在不同的表中插入数据
问题描述
我试图将数据添加到 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 */
?>
解决方案
- 您应该在所有查询中使用参数。
bindParam()
如果您没有在查询中放置占位符,则无法使用。 - FILTER_SANITIZE_SPECIAL_CHARS 不是
bindParam()
. 第三个参数是可选的数据类型。 - 你永远不会在
$thelast
任何地方设置,应该是$conn
。 - 如果
$id
已分配,则不能使用LAST_INSERT_ID()
getID_user
。只需将该值插入user
表中。 - 您无需执行查询即可获取最后一个插入 ID。只需在下一个查询
LAST_INSERT_ID()
的列表中使用。VALUES
INSERT
- 您无法获取
UPDATE
查询的结果。 - 如果您没有进行插入,则无法获得最后一个插入 ID。查询
UPDATE user
应该是.INSERT INTO user
- 在几个地方你分配了 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 */
?>
推荐阅读
- mysql - 如何实时更新两个数据库
- flutter - Flutter:多层堆栈中顶层的自定义滚动视图
- css - Bootstrap - 只是缺少验证样式
- python - 运行 np.genfromtxt() 时出现 MemoryError
- java - SQLite 数据库
- python - 如何迭代直到最长的可迭代用尽。使用 zip_longest 进行迭代
- django - 如何从多对多查询以从模板django中的数据库表中选择特定项目
- android - 此下载链接是否提供了所有组件,例如 sdks?
- oauth-2.0 - Oauth2: best practice to keep access_token fresh?
- python - How to iterate through and unzip ".gz" files in python?