gpt4 book ai didi

php - 没有插入数据,查询执行似乎没有运行

转载 作者:行者123 更新时间:2023-12-03 23:47:20 24 4
gpt4 key购买 nike

我有一个收集数据并将其放入对象的函数。然后它将这个对象转换为一个 json 字符串,并将其放入一个表中。完成它大约需要 30 秒。

现在,这个 json 字符串相当大(大约 36mb 左右)。

但是当我执行查询时,表中没有任何内容,也没有任何错误。

所以我做了一些调试,现在的代码是这样的:

function __construct($total, $allActions, $employees, $branches, $companies, $departments, $lastUpdated, $update = false)
{
echo "Made it to constructor. Update: ".json_encode($update);
global $conn;
$this->Total = $total;
$this->AllActions = $allActions;
$this->Employees = $employees;
$this->Branches = $branches;
$this->Companies = $companies;
$this->Departments = $departments;
$this->LastUpdated = $lastUpdated;
if($update) {
try {
$query = $conn->prepare("INSERT INTO actionplansummarydata_new (json, last_updated) VALUES (?, ?)");
echo "Prepared query.";
if($query->bind_param('ss', json_encode($this), $this->LastUpdated->format("Y-m-d H:i:s"))) {
echo "Bound parameters.";
if ($query->execute()) {
echo "Executed query.";
} else {
echo "Error inserting summary: " . $query->error;
}
} else {
echo "Error binding query: " . $query->error;
}
} catch(Exception $ex) {
echo "Exception: ".$ex->getMessage();
}
}
}

现在,当它被执行时,这是我在页面上得到的响应:

Made it to constructor. Update: truePrepared query.Bound parameters.



但我在这里有一个 if 语句:
            if ($query->execute()) {
echo "Executed query.";
} else {
echo "Error inserting summary: " . $query->error;
}

都不是其中一些会回显到页面上,我也没有任何异常。

我完全感到困惑。

服务器是 MariaDB 10.4, json数据库中的字段是 longtext ,所以它应该能够存储它。

最佳答案

如果您的错误报告是 E_ALL,那么您不应该在执行查询时面临静默失败……无论如何,首先,有一些步骤可以排除故障点。

移动json_encode($this)脱离绑定(bind),赋值给变量,var_dump看看你实际上在喂活页夹什么。 $this->LastUpdated->format 也是如此;假设它是一个 DateTime 对象,但谁知道呢。当故障点在条件语句之外时更容易调试。

如果您插入虚拟数据字符串,您能否确认它是否按预期工作?例如。:

if($query->bind_param('ss', '{}', '2020-05-19 01:01:01')); {

这里的一个问题是 bind_param通过引用而不是值绑定(bind)变量。因此,你不能用函数来喂它。您必须将值分配给变量,然后才能绑定(bind)它们(因为函数不返回可用的引用)。含义,更改为:
$json = json_encode($this);
$updated = $this->LastUpdated->format("Y-m-d H:i:s");
if($query->bind_param('ss', $json, $updated)) {

您可以将绑定(bind)结果(真/假)分配给一个变量,然后 var_dump . (我们宁愿不要 var_dump 从条件语句内部,对吗?)由于上述原因,绑定(bind)会失败 === false。同样, var_dump准备好的查询以确保它成功,跟踪每一步。

数据库引擎可能会触发 fatal error ,这很可能与插入查询的大小有关。您可能需要查看 MariaDB 错误日志以获取更多线索,以防您在某处遇到限制。我猜是 max_allowed_packet , 默认 16MB,你已经搞定了。 (另见 mysqli_stmt::send_long_data 以 block 形式发送长数据。)

在其他问题中, json是 MySQL 8.0 中的保留字(没有为 Maria 10.4 列出?!)。您可能想要重命名该列以确保它不会成为问题(即使它在这里工作)。

至于这种情况是如何可能的,您所描述的(if/else 没有输出)只有在 $query->execute() 触发 fatal error 时才有意义。那从未显示过。除非 PHP 错误报告中存在某些 MySQL 故障的错误。对您的 PHP 错误报告配置进行三重检查,包括代码/.htaccess 中可能覆盖 php.ini 的任何位置。

关于php - 没有插入数据,查询执行似乎没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61821857/

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