Php 未捕获错误:在中调用未定义的函数bindValue()

Php 未捕获错误:在中调用未定义的函数bindValue(),php,Php,我正试图从数据库中获取数据,但出现了此错误 致命错误:未捕获错误:调用C:\xampp\htdocs\includes\article.php中未定义的函数bindValue():17堆栈跟踪:#0 C:\xampp\htdocs\article.php(11):article->fetch_data('0')#1{main}在第17行的C:\xampp\htdocs\includes\article.php中抛出 C:\xampp\htdocs\includes\article.php <

我正试图从数据库中获取数据,但出现了此错误

致命错误:未捕获错误:调用C:\xampp\htdocs\includes\article.php中未定义的函数bindValue():17堆栈跟踪:#0 C:\xampp\htdocs\article.php(11):article->fetch_data('0')#1{main}在第17行的C:\xampp\htdocs\includes\article.php中抛出

C:\xampp\htdocs\includes\article.php

<?php
class Article {

    public  function fetch_all(){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM articles");
        $query->execute();

        return $query->fetchAll();
    }

    public function fetch_data($article_id){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ? ");
        $query = bindValue(1, $article_id);
        $query->execute();

        return $query->fetch();
    } 
}
?>
<?php

include_once('includes/connection.php');
include_once('includes/article.php');

$article = new Article;


if (isset($_GET['id'])){
    $id = $_GET['id'];
    $data = $article->fetch_data($id);

    print_r($data);
} else {
    header('Location: index.php');
    exit();

}
?>

C:\xampp\htdocs\article.php

<?php
class Article {

    public  function fetch_all(){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM articles");
        $query->execute();

        return $query->fetchAll();
    }

    public function fetch_data($article_id){
        global $pdo;

        $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ? ");
        $query = bindValue(1, $article_id);
        $query->execute();

        return $query->fetch();
    } 
}
?>
<?php

include_once('includes/connection.php');
include_once('includes/article.php');

$article = new Article;


if (isset($_GET['id'])){
    $id = $_GET['id'];
    $data = $article->fetch_data($id);

    print_r($data);
} else {
    header('Location: index.php');
    exit();

}
?>

更改此选项:

$query = bindValue(1, $article_id);
对此

$query->bindValue(1, $article_id);

bindValue
是PDO语句的方法,而不是单独的函数

bindValue()
是PDOStatement对象的一个方法,由prepare调用返回。你想要这样的东西:

$query = $pdo->prepare('SELECT * FROM articles WHERE article_id = ?');
$query->bindValue(1, $article_id);
$query->execute();
您还可以使用命名参数:

$query = $pdo->prepare('SELECT * FROM articles WHERE article_id = :article_id');
$query->bindValue('article_id', $article_id);
$query->execute();
另外,不要依赖全局变量,它打破了面向对象编程的基本概念。相反,将PDO连接对象作为参数传递到项目对象中。这就是所谓的

然后,在实例化一篇文章时,只需将
$pdo
作为参数传递:

$article = new Article($pdo);

错别字不应该被回答,但是关闭了的iMo错别字不应该被回答,但是关闭了的iMo错别字不是错别字而是misunderstanding@delboy1978uk如果他们认为bindValue是一个普通的PHP函数,这是基于同样的理由(如中所述,对未来的用户没有好处)?无论如何祝您今天过得愉快!这个问题是由一个无法再复制的问题或一个简单的印刷错误引起的。虽然类似的问题可能在这里的主题,这是一个解决的方式不太可能帮助未来的读者。这通常可以通过在发布前确定并仔细检查重现问题所需的最短程序来避免。