【发布时间】: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