gpt4 book ai didi

php - 为什么当我相继有两个 mysqli 查询时,我只能执行第一个查询?

转载 作者:行者123 更新时间:2023-11-29 11:58:22 24 4
gpt4 key购买 nike

我编写了以下 php 代码:

if ($insert_client_stmt = $mysqli->prepare("INSERT INTO client (username, email, password) VALUES (?, ?, ?)")) {
$insert_client_stmt->bind_param('ssss', $username, $email, $password);
// Execute the prepared query.
if (! $insert_client_stmt->execute()) {
header('Location: ../error.php?err=Registration failure: INSERT');
}

}
$client_id = $mysqli->insert_id;




if ($insert_client_details_stmt = $mysqli->prepare("INSERT INTO client_addr (addr_id, client_id, client_name, contact_name) VALUES (?, ?, ?, ?)")) {
$insert_client_details_stmt->bind_param('ssss', $client_id, $_POST['company'], $_POST['contact']);
// Execute the prepared query.
if (! $insert_client_details_stmt->execute()) {
header('Location: ../error.php?err=Registration failure: INSERT');
}

}

header('Location: ./register_success.php');

在执行完该代码后,我的浏览器将我重定向到页面 register_success.php,但在我的数据库中我只有新客户端,client_addr 中的条目丢失了。什么会导致这种情况?我必须以某种方式重置 mysqli 吗?谢谢!

最佳答案

您的代码中有两个问题。

首先,您处理错误的方式是有史以来最糟糕的。从而让自己无法获得对您有帮助的有用错误消息。为了在 mysqli 中进行正确的错误处理,您必须摆脱所有这些无用的 if 并告诉 mysqli 在出现错误时抛出异常。

其次,错误本身很简单:您将三个变量传递到第二个查询中,而 INSERT 查询中有四个字段。您必须从查询中取出addr_id和相应的占位符

所以,代码是。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$stmt = $mysqli->prepare("INSERT INTO client (username, email, password) VALUES (?,?,?)");
$stmt->bind_param('sss', $username, $email, $password);
$stmt->execute();
$client_id = $mysqli->insert_id;

$stmt = $mysqli->prepare("INSERT INTO client_addr (client_id, client_name, contact_name) VALUES (?,?,?)");
$stmt->bind_param('sss', $client_id, $_POST['company'], $_POST['contact']);
$stmt->execute();

header('Location: ./register_success.php');

关于php - 为什么当我相继有两个 mysqli 查询时,我只能执行第一个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com