php - 准备好的语句不允许我调用 $mysqli->stmt_init()

标签 php mysql mysqli prepared-statement

我以前做过这个,但对 mysqli 和准备好的语句还很陌生(我相信你可以从这个问题中看到)。

我哪里出错了?

这是我的连接函数(“Connect”类的一部分)

public function site_db()
{
    // Connect to MySQL 
    $link = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB); 

    // Check for Errors 
    if(mysqli_connect_errno()) 
    { 
        //echo mysqli_connect_error(); //shouldnt show client specific error information. 
        die('Error connecting to mysql database please report.'); 
    }
}

这是导致错误的函数:

public function exists ($what, $who)
{

    $query = "SELECT * FROM users WHERE ? = ?";

    // Get instance of statement 
    $stmt = $mysqli->stmt_init();

    // Prepare query 
    if($stmt->prepare($query)) 
    { 
        // Bind Parameters 
        $stmt->bind_param("ss", $what, $who); 

        // Execute statement 
        $stmt->execute(); 

        // Bind result variables 
        $stmt->bind_result($result); 

        // Fetch Value 
        $stmt->fetch(); 

        // catch num_rows result as variable
        $username_result = $result->num_rows;

        // Close Statement 
        $stmt->close();
    }

    if ($username_result != 0)
    {
        return true;
        echo 'true';
    }
    else
    {
        return false;
        echo 'false';
    }
}

我得到的错误:

PHP fatal error :在第 X 行的 somefile.php 中的非对象上调用成员函数 stmt_init()

它指的是这一行:

$stmt = $mysqli->stmt_init();

我在这里犯了一个愚蠢的错误吗?我怎么不能这么称呼?

编辑//

注意:我没有说得很清楚,但这两个函数位于不同的类中。

最佳答案

public function site_db()
{
    // Connect to MySQL 
    $mysqli = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB); 

    // Check for Errors 
    if(mysqli_connect_errno()) 
    { 
        //echo mysqli_connect_error(); //shouldnt show client specific error information. 
        die('Error connecting to mysql database please report.'); 
    }

     return $mysqli;
}


public function exists (Mysqli $mysqli, $what, $who)
{

    $query = "SELECT * FROM users WHERE ? = ?";

    // Get instance of statement 
    $stmt = $mysqli->stmt_init();

    // Prepare query 
    if($stmt->prepare($query)) 
    { 
        // Bind Parameters 
        $stmt->bind_param("ss", $what, $who); 

        // Execute statement 
        $stmt->execute(); 

        // Bind result variables 
        $stmt->bind_result($result); 

        // Fetch Value 
        $stmt->fetch(); 

        // catch num_rows result as variable
        $username_result = $result->num_rows;

        // Close Statement 
        $stmt->close();
    }

    if ($username_result != 0)
    {
        return true;
        echo 'true';
    }
    else
    {
        return false;
        echo 'false';
    }
}

使用方法:

实例化具有 site_db() 方法的第一个类

$db = new Class();

然后实例化具有exist()方法的第二个类

$query = new Class();

然后简单

$query->exist($db->site_db(), $what, $who );

关于php - 准备好的语句不允许我调用 $mysqli->stmt_init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658722/

相关文章:

MySQL根据另一个表中的id更新表

mysql - 否定与匹配

c# - 如何使用 .Net (C#/VB) 在 MySQL 中存储/检索 HTML

php - 将 blob 图像(存储在数据库中)下载到我的计算机

php 将发布数据更改为变量

php - 使用 PHP 将推荐数量和推荐 ID 添加到 MySQL 数据库中

php - 无法从 PHP 更新/更改 MySQL 中的数据

php - 为什么我的 php 不能打印出我输入的字符串?

php - 正确连接 2 个表

php - mysql查询返回 bool 值但我希望返回id