【问题标题】:PDO Binding is not workingPDO 绑定不起作用
【发布时间】:2017-07-01 12:26:20
【问题描述】:

起初,我以为 Eloquent/Query Builder 坏了。罪魁祸首是PDO。我正在使用 MSSQL/SqlSrv

PHP 版本:7.1

MSSQL 2016

我正在尝试运行此查询:

$results = DB::connection('RF_USER')->select("SELECT username = CAST(id as varchar(255)), password = CAST(password as varchar(255)) FROM tbl_rfaccount WHERE id=CONVERT(binary, :username)", ["username" => $username]);

但它总是返回一个空数组,因为我的数据库中有数据。 id 是 BINARY 类型。密码也是二进制类型。我该如何解决这个问题?

调试后发现是这样的:

当我这样明确地声明用户名时,即“HASSAN”

$results = DB::connection('RF_USER')->select("SELECT username = CAST(id as varchar(255)), password = CAST(password as varchar(255)) FROM tbl_rfaccount WHERE id=CONVERT(binary, 'HASSAN')");

返回正确。

但是,当我尝试绑定用户名时,它不起作用。我确实调试了变量$username 的值,它是完全正确的。

经过几个小时的调试,我决定使用普通的 PDO,你猜怎么着? PDO 是罪魁祸首。

    $username = "HASSAN";

    $stmt = $this->db->prepare("SELECT username = CAST(id as varchar(255)), password = CAST(password as varchar(255)) FROM tbl_rfaccount WHERE id=CONVERT(binary, :username)");

    $stmt->bindValue(':username', $username, PDO::PARAM_STR);
    $stmt->execute();

    $results = $stmt->fetch();

上面的代码是正确的,但不起作用。并且不起作用,我的意思是,我得到一个空的结果。没有结果。但是,这样做:

    $stmt = $this->db->prepare("SELECT username = CAST(id as varchar(255)), password = CAST(password as varchar(255)) FROM tbl_rfaccount WHERE id=CONVERT(binary, 'HASSAN')");

    $stmt->execute();

    $results = $stmt->fetch();

【问题讨论】:

    标签: php sql-server laravel php-7.1


    【解决方案1】:

    DB::raw() 用于您的选择语句。

    $results = DB::connection('RF_USER')->select(
                   DB::raw(
                     "SELECT 
                         username = CAST(id as varchar(255)), 
                         password = CAST(password as varchar(255)) 
                      FROM tbl_rfaccount 
                      WHERE id=CONVERT(binary, :username)", 
                      ["username" => $username]
                  )
               );
    

    【讨论】:

    • 感谢您的回复。我有两个例外。
    • SQLSTATE[07002]: [Microsoft][ODBC Driver 13 for SQL Server]COUNT field incorrect or syntax error (SQL: SELECT username = CAST(id as varchar(255)), password = CAST(password as varchar(255)) FROM tbl_rfaccount WHERE id=CONVERT(binary, :username))
    • PDOException SQLSTATE[07002]: [Microsoft][ODBC Driver 13 for SQL Server]COUNT field incorrect or syntax error
    【解决方案2】:

    经过研究,我发现不能在 SQL 查询中对函数内的值使用绑定。 MSSQL 不支持它。

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 2012-03-23
      • 2015-06-10
      • 2012-09-17
      • 1970-01-01
      • 2013-06-08
      • 2020-09-05
      • 1970-01-01
      • 2013-12-15
      相关资源
      最近更新 更多