调用未定义函数bindValue()报错:数据库数据获取失败求助
解决PHP中Call to undefined function bindValue()的致命错误
嘿,我一眼就瞅出问题根源了——你把PDO的bindValue()方法当成全局函数来调用了,但它其实是PDOStatement对象的专属成员方法,直接裸调用的话PHP肯定找不到它呀!
咱们看你includes/article.php第17行的代码:
$query = bindValue(1, $article_id);
这里犯了两个关键错误:
- 没有通过之前
$pdo->prepare()返回的PDOStatement对象(也就是$query)来调用bindValue(),直接调用的话PHP会认为这是个不存在的全局函数,自然抛出致命错误。 - 你用
=给$query重新赋值了,这会把之前prepare()得到的PDOStatement对象直接覆盖成bindValue()的返回值(布尔值),后面再调用$query->execute()的时候,因为$query已经不是对象了,照样会出问题。
修正后的正确代码
把fetch_data方法改成下面这样就行:
public function fetch_data($article_id){ global $pdo; $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ? "); // 正确姿势:通过$query对象调用bindValue,别重新赋值! $query->bindValue(1, $article_id); $query->execute(); return $query->fetch(); }
额外给你提个优化建议
尽量别用global $pdo这种全局变量的方式,代码维护起来太麻烦,还容易出问题。可以试试用构造函数注入PDO实例,代码会更健壮:
class Article { private $pdo; // 构造函数接收PDO实例 public function __construct(PDO $pdo){ $this->pdo = $pdo; } public function fetch_all(){ $query = $this->pdo->prepare("SELECT * FROM articles"); $query->execute(); return $query->fetchAll(); } public function fetch_data($article_id){ $query = $this->pdo->prepare("SELECT * FROM articles WHERE article_id = ? "); $query->bindValue(1, $article_id); $query->execute(); return $query->fetch(); } }
然后在article.php里初始化的时候把PDO传进去:
$article = new Article($pdo);
这样就彻底摆脱全局变量的依赖啦!
最后别忘了确认你的connection.php里正确初始化了$pdo对象,要是数据库连接本身有问题,那后续操作也白搭~
内容的提问来源于stack exchange,提问作者anton
相关产品推荐
相关产品推荐

