我正忙于一个从数据库获取设置的函数,突然,我遇到了这个错误:

Fatal error: Call to a member function bind_param() on boolean in C:\xampp2\htdocs\application\classes\class.functions.php on line 16

通常情况下,这意味着我要从不存在的表格和东西中 Select 东西.但在这种情况下,我不是...

下面是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'
)

现在奇怪的是,表存在,请求的设置存在,数据库存在,但是错误仍然不会消失.这里有一些证据证明数据库是正确的:

img

推荐答案

问题在于:

$query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');
$query->bind_param('s', $setting);

prepare()方法可以返回false,你应该判断一下.至于为什么返回false,可能是表名或列名(在SELECTWHERE子句中)不正确?

此外,考虑使用类似于$this->db->conn->error_list的东西来判断解析SQL时发生的错误.(我偶尔会 echo 实际的SQL语句字符串,并将其粘贴到phpMyAdmin中进行测试,但肯定有什么地方失败了.)

Php相关问答推荐

根据WooCommerce产品类别自定义数量输入步骤

如何在不打开页面的情况下制作收件箱

如何使用动态键来获取Laravel Livewire表格中的错误?

WooCommerce:有条件地更改特定区域的发货类别

MySQLi是否在事务错误时删除保存点(并且仅删除保存点)?

使用正则表达式搜索两个子字符串(没有重叠/共享字符)

Laravel POST方法返回状态:POST方法上不允许使用405方法

如何实现对数据库表中多列的唯一约束?

免费送货柜台,考虑到折扣码

移动应用:在PHP中忽略Cookie?

如何在execute语句中使用存储过程参数?

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

服务器升级到新的mysql版本8.0.34后查询错误

WooCommerce:如果购物车中已存在产品,则增加购物车商品数量

通过添加计数器修改文本区域表单中的重复值

我不明白为什么我收到未定义的数组键异常错误 - Laravel 9 PHP 8

如何使用在产品快速编辑菜单前端的自定义框中 Select 的值更新 woocommerce 产品属性值?

Symfony 迁移判断器在我的工作中失控

列表不在 GROUP BY 子句中并且包含 X2CRM 中的非聚合列

PHP Remedy API 调用以创建附件无效的条目(使用 Postman Works!)