php - MySQLi 的正确使用

标签 php oop class mysqli

有人可以指导我在 PHP 中使用 MySQLi 扩展的正确方法吗?我以前一直使用过程式 MySQL 函数,想要进行更改,但发现 PHP.net 和其他网站上的示例太复杂。似乎有多种方法可以完成同一件事。我想通过以下方法使用它:

function checkCredentials($username, $password)
{
    $q = $db->prepare("SELECT id FROM `users` WHERE username=? AND password=? LIMIT 1");
    $q->bind_param('ss', $username, $password);
    $q->execute();
}

这就是我所了解的 PHP.net 示例,但我收到此错误:

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\classes\user.class.php on line 14

($db 变量是我的用户类中的句柄,工作正常)

对于以前从未使用过该意图的人以及对类和 OOP 不太熟悉的人来说,文档似乎太复杂了。

是否有人有解释如何连接/准备语句/执行查询和所有内容的页面链接,或者可以将其放在答案中?

谢谢。

最佳答案

问题是 $db 不在范围内(因此它被初始化为 null)。如果您向 E_ALL 发送 error_reporting,您会看到有关尝试使用未初始化变量 $db 的通知...您需要以某种方式引入 $db code> 进入函数范围:

如果它是全局变量:

function checkCredentials($username, $password) {
    global $db;

如果它是一个成员变量(并且该函数实际上是对象中的一个方法):

function checkCredentials($username, $password) {
    $q = $this->db->prepare();

如果是其他内容,您可能需要将其传入:

function checkCredentials($username, $password, $db) {

关于php - MySQLi 的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3601621/

相关文章:

php - Swift JSON 序列化错误

c++ - 在 C++ 中使用函数作为类成员

language-agnostic - 多少抽象就太多了?

c# - 如何从已覆盖的子类对象调用父类(super class)方法?

css - 将CSS类添加到wordpress中的媒体图像中

javascript - 通过表单传递base64编码的图像

php - 如何在不更新或创建新行的情况下向同一用户添加更多数据?

javascript - 从带有 anchor 的链接获取带有 HTTP Referer 的上一个链接

c++ - 程序运行时如何创建新变量或对象? (C++)

Javascript:使用链调用new实例化一个对象