php函数param太多,关于php:在非对象上调用成员函数bind_param()

博客内容涉及PHP编程中遇到的一个常见错误——在非对象上调用成员函数`bind_param()`。作者分享了当尝试绑定变量到预处理SQL语句时遇到的问题,以及如何通过检查查询语法、数据库连接和权限来定位和解决问题。错误可能是由于SQL语句错误、数据库连接失败或权限不足等引起的。解决方案包括验证SQL语法、确保正确连接数据库并检查用户权限。
摘要由CSDN通过智能技术生成

本问题已经有最佳答案,请猛点这里访问。

我正在尝试在此准备好的语句中绑定变量,但我一直收到错误:

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

调用该函数,并将变量传递给它。 当我更改函数以仅回显变量时,该变量会在页面上正常打印,但是如果我尝试在此处绑定它,则会收到错误。 有人可以帮忙吗?

//CALL FROM PAGE ONE

check($username);

//FUNCTION ON PAGE 2

function check($username){

$DBH = getDBH();

$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");

$qSelect->bind_param("s", $username);

}

我知道函数没有完全写在这里,但这不应该是一个问题。 我不明白为什么我会收到此错误。

var_dump($qSelect)检查它是否符合您的想法。

好吧,prepare()失败的原因之一是,如果发送给它的sql语句在当前数据库中无效。

prepare()然后将返回false。

例如-如果表名不正确或者查询中的一个或多个字段不存在。

完美的信息。

谢谢! 那对我很有帮助。 :)

如错误消息所述,$qSelect似乎不是对象。尝试在准备调用之后使用var_dump($qSelect);进行调试。还检查getDBH()是否返回您需要的内容。

听起来像prepare-call失败了(不知道为什么),所以它返回false-false不是对象,因此您不能在该对象上调用bind_param()。

编辑:您尚未提供该信息,但似乎您正在使用PHP的PDO。在这种情况下,请查看文档。

If the database server successfully

prepares the statement, PDO::prepare()

returns a PDOStatement object. If the

database server cannot successfully

prepare the statement, PDO::prepare()

returns FALSE or emits PDOException

(depending on error handling).

您应该将服务器配置为返回那些PDO异常,这将告诉您为什么prepare调用失败。

是的,它的qSelect返回bool(false),但这没有任何意义,因为我有一个几乎相同的函数,并且可以正常工作。

我正在使用mysqli

嗯 我也处于一种功能几乎相同的情况。 原来,我已经复制并粘贴了它以便添加字段。 但是我忘记了在新领域之前的逗号! 愚蠢的错误,但这只是表明它可能只是您的输入错误。

我也使用mysqli方法,并且在关闭第一个实例之前创建另一个mysqli实例时遇到了相同的错误。因此,在启动同一段代码之前使用close()很重要。例如:

$DBH = getDBH();

$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");

$qSelect->bind_param("s", $username);

$qSelect->close();  //

如果他多次使用该函数,我想他应该使用reset()而不是close(),并将prepare()移到funcion之外,例如,移至构造函数中,并将put语句移入如下属性:$ this- > qSelect。

看来准备工作很笨。它并不完全依赖于MySQL的查询,这意味着,如果在您的查询中,您有一个表恰好具有关键字的相同名称,例如" user"," order",... ,它只是不能将其识别为表,而是将其识别为关键字命令的实际作用,因此查询变成一团糟,并且prepare失败了。

要解决此问题很简单,您必须以"正确"的方式键入该名称,并在表名的两侧加上"`"。例:

`user`, `order`, `...`

没错,但是,我发现从准备这种行为开始就很愚蠢。

仅用于尝试帮助没有PHP经验的人像我一样。

就我而言,发生此错误是因为我在SQL sintax中出错。控制台堆栈跟踪不显示此问题。

当我修复SQL时,过程正常。

检查数据库中用户的权限。没有"插入"权限的用户在尝试插入时也会导致"在非对象上调用成员函数bind_param()"消息错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值