You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP类中PDO查询数据库报SQL语法错误,求助解决

问题描述

在PHP类中查询数据库时触发SQL语法错误:

Uncaught PDOException: Syntax error or access violation: You have an error in your SQL syntax

使用普通PHP函数实现相同功能正常,但类中的代码无法运行。

调用代码:

// using composer autoload.php

$user = new User($pdo);
$email = $user->getEmail($username);
echo $email;

注:$pdo来自连接MariaDB的database.php文件

User类代码:

class User
{
    private $dbc;

    public function __construct(\PDO $pdo)
    {
        $this->dbc = $pdo;
    }

    public function getEmail($username)
    {
       $stmt = $this->dbc->query('SELECT * FROM users WHERE username=?');
       $stmt->execute([$username]);
       $request = $stmt->fetch();
       return $request['email'];
    }
}
问题原因与解决办法

错误出在getEmail方法里的query()调用——PDO的query()方法直接执行SQL语句,不支持预处理占位符?,这会导致SQL语法错误。正确的做法是使用prepare()方法创建预处理语句,再执行绑定参数。

修正后的getEmail方法代码:

public function getEmail($username)
{
   $stmt = $this->dbc->prepare('SELECT email FROM users WHERE username=?');
   $stmt->execute([$username]);
   // 直接获取单个字段,简化代码
   return $stmt->fetchColumn();
}

额外优化点:

  • 只查询需要的email字段,比SELECT *更高效
  • 使用fetchColumn()直接返回单个字段值,省去数组取值步骤

内容的提问来源于stack exchange,提问作者holdmydev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:33:11