【问题标题】:MySQLi - Call to undefined method ::prepare()MySQLi - 调用未定义的方法 ::prepare()
【发布时间】:2018-07-10 19:21:50
【问题描述】:

首先,关于 SO,有几个关于这个主题的问题。然而,最有用的是关于 PDO,我使用 MySQLi。 This one 接近了,但我似乎无法让它适合我的情况。因此提出了这个问题。

我尝试使用准备好的语句来处理 HTML 表单中的用户输入。这是发布到 process.php:

class connect{
    public $connection;

    function db_connect(){
      $this->connection = mysqli_connect(xxx,xxx,xxx,xxx);
      return $this->connection;
    }

$con = new connect();
$con->db_connect();

$keyword = $_POST["value"];
$query = "SELECT * FROM table WHERE title LIKE ?";

$stmt = $con->prepare($query);
$stmt->bind_param("s", $keyword);
$stmt->execute();

这会引发错误

致命错误:未捕获的错误:调用未定义的方法 process.php:27 中的 connect::prepare()

第 27 行包含 $stmt = $con->prepare($query);

恐怕这个问题的答案可能非常简单,但我们将不胜感激。

【问题讨论】:

  • 您正尝试在您的类 connect 上调用该方法,如错误所示。它没有prepare 方法。你应该在它返回的对象上调用它。
  • 你的意思可能是$con->connection->prepare()
  • 尽量不要将mysqli 包裹在其他层中。如果您需要抽象,请使用 ORM。
  • $con 从`mysqli_connect()`返回的东西吗?我不这么认为。我认为它应该类似于第 21 行的$connection = $con->db_connect()
  • @tadman,听起来我可以从中学习,你的意思是什么?

标签: php mysqli


【解决方案1】:

$con 不包含数据库连接。

应该是

$connection = $con->db_connect();

db_connect() 返回实际的数据库连接

然后使用$connection访问prepare()等mysqli函数

$stmt = $connection->prepare($query); 

【讨论】:

    【解决方案2】:

    您永远不会将$con->db_connect() 的结果分配给变量。 $con 仍然是 connect 类。将结果分配给变量$connection = $con->db_connect(); 并使用$connection 变量,或者使用connect() 类的公共$connection 属性:

    $statement = $con->connection->prepare(...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多