gpt4 book ai didi

php - mysqli 更新查询失败

转载 作者:行者123 更新时间:2023-11-30 22:15:22 32 4
gpt4 key购买 nike

我正在尝试更新发布到第三方平台的内部数据库。我已经成功地为另一个变量更新了同一个数据库,但是当我在其中添加这个变量时,它全部中断了。这是 mysqli 更新语句:

@$mysqli->query("UPDATE `tableName` SET `columnID`=" . (int)$columnID . ',`columnID2`=' . (int)$columnID2 . ',`columnID3`=' . (int)$columnID3 . ',`columnID4`=' . $columnID4 . ' WHERE `id`=' . (int)$id . ' LIMIT 1');

出于某种原因,如果我取出 columnID4 它会起作用,但是当我在语句中包含 columnID4 时它不起作用。

我在 $columnID4 上做了一个 var dump,它每次都返回我期望的值。

当我做的时候

echo $mysqli->error;

我收到一条消息,说“字段集”中的“数组”未知数组。

这是我设置字段的代码。

if ($query->num_rows == 1) {
$columnID4 = $query->fetch_assoc();
} else {
$columnID4 = 0;
}

最佳答案

通过盯着构建 SQL 字符串的 PHP 代码来调试 SQL 总是很困难。相反,在构建 SQL 之后查看它!

提示:切勿使用 @ 错误抑制运算符。最好是修复错误,而不是抑制错误。

我不喜欢 PHP 开发人员使用字符串连接的习惯。它使代码难以阅读,而且很容易出错。这里有两种不同的方法可以使代码更健壮:

解决方案 1:使用 sprintf()将变量插入到您的 SQL 字符串中。这允许您分别使用 %d%f 将变量强制转换为整数或小数。

$sql = sprintf("UPDATE `tableName` SET `columnID`=%d, `columnID2`=%d, 
`columnID3`=%d, `columnID4`=%f WHERE `id`=%d LIMIT 1",
$columnID, $columnID2, $columnID3, $columnID4, $id);
error_log("sql = $sql");
$mysqli->query($sql);

解决方案 2:使用绑定(bind)参数 mysqli_stmt::bind_param() .这是使用 SQL 时推荐的做法。变量永远不会触及您的 SQL 代码,没有办法破坏查询语法。

$sql = "UPDATE `tableName` SET `columnID`=?, `columnID2`=?, 
`columnID3`=?, `columnID4`=? WHERE `id`=? LIMIT 1";
error_log("sql = $sql");
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("iiidi", $columnID, $columnID2, $columnID3, $columnID4, $id);
$stmt->execute();

关于php - mysqli 更新查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38469731/

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