gpt4 book ai didi

php - 在非对象上调用成员函数 bind_param()

转载 作者:行者123 更新时间:2023-11-29 01:28:37 26 4
gpt4 key购买 nike

我正在尝试为用户制作一个可编辑的个人资料。他们单击编辑按钮(表单发布)返回带有可编辑信息的页面(仅当在文本区域中设置($_POST["edit"])、输入和“完成编辑”按钮时。当我点击完成编辑。它需要启动将新信息更新到数据库的功能。但它没有更新它的返回错误:

Call to a member function bind_param() on a non-object

我的代码:

if(isset($_POST["cedit"]) && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])){

if($stmtq = $mysqli->prepare("UPDATE `sites`.`accounts` SET `fullname` = ? ,`description` = ? WHERE `id` = ? ") && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])){
$stmtq->bind_param("ssd", $_POST["fn"]." ".$_POST["ln"], $_POST["desc"], $_SESSION["user_id"]);
$stmtq->execute();
$stmtq->close();
}
}

最佳答案

您在运算符优先级方面遇到问题,导致 $stmtqtruefalse bool 值,而不是其预期的准备语句.

这是由于 && 条件链被打包到同一个条件中。它们发生在赋值 = 之前。添加一些 ()。基本上等于:

// $x is always assigned a boolean
if ($x = (object && true && true))

而不是预期的

// $x is assigned the object
if (($x = object) && (true && true))

修复它:

// Wrap the assignment in its own () group to isolate from the && conditions
if (($stmtq = $mysqli->prepare("UPDATE `sites`.`accounts` SET `fullname` = ? ,`description` = ? WHERE `id` = ? ")) && !empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"]) {
// Successful prepare() assignment and all other conditions
// Proceed with bind_param()/execute()
}

虽然它增加了几行,但首先执行 prepare() 和赋值,然后验证其他条件会更容易阅读并且更不容易出现这些优先级问题,反之亦然.

if (!empty($_POST["fn"]) && !empty($_POST["ln"]) && !empty($_POST["desc"])) {
if ($stmtq = $mysqli->prepare(.....)) {
// All is well, proceed with bind_param()/execute()
}
}

关于美味的细节,here is PHP's operator precedence chart . && 逻辑运算符的优先级高于 = 赋值。

关于php - 在非对象上调用成员函数 bind_param(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301078/

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