mysqli_fetch_assoc() expects parameter / Call to a member function bind_param() errors. How to get the actual mysql error and fix it?
(1个答案)
在8个月前关闭。
我忙于从数据库获取设置的功能,突然,我遇到了此错误:
Fatal error: Call to a member function bind_param() on boolean in C:\xampp2\htdocs\application\classes\class.functions.php on line 16
通常,这意味着我要从不存在的表和内容中选择内容。但是在这种情况下,我不是...
这是
getSetting
函数:
public function getSetting($setting)
{
$query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');
$query->bind_param('s', $setting);
$query->execute();
$query->bind_result($value, $param);
$query->store_result();
if ($query->num_rows() > 0)
{
while ($query->fetch())
{
return $value;
if ($param === '1')
{
$this->tpl->createParameter($setting, $value);
}
}
}
else
{
__('invalid.setting.request', $setting);
}
}
$this->db
变量通过构造函数传递。如有需要,这里是:
public function __construct($db, $data, $tpl)
{
$this->db = $db;
$this->tpl = $tpl;
$this->data = $data;
$this->data->setData('global', 'theme', $this->getSetting('theme'));
}
另外,由于我正在使用数据库,因此我的数据库连接为:
class Database
{
private $data;
public function __construct($data)
{
$this->data = $data;
$this->conn = new MySQLi(
$this->data->getData('database', 'hostname'),
$this->data->getData('database', 'username'),
$this->data->getData('database', 'password'),
$this->data->getData('database', 'database')
);
if ($this->conn->errno)
{
__('failed.db.connection', $this->conn->errno);
}
date_default_timezone_set('Europe/Amsterdam');
}
我已经测试了连接,可以肯定地按预期工作100%。
我在配置文件中设置数据库连接的东西:
'database' => array(
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => ******,
'database' => 'wscript'
)
现在,奇怪的是;表存在,请求的设置存在,数据库存在,但仍然不会出现该错误。这是数据库正确的一些证明:
问题在于:
$query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');
$query->bind_param('s', $setting);
prepare()
方法可以返回
false
,您应该检查一下。至于为什么返回
false
,也许表名或列名(在
SELECT
或
WHERE
子句中)不正确?
另外,考虑使用
$this->db->conn->error_list
之类的东西来检查在解析SQL时发生的错误。 (我偶尔也会回显实际的SQL语句字符串,并粘贴到phpMyAdmin中进行测试,但是肯定有一些失败的地方。)
我是一名优秀的程序员,十分优秀!