Laravel型号,select十六进制查询
Laravel model, select query with hexadecimal
我在从 laravel 中使用 CCSID 获取十六进制值的查询返回结果时遇到问题。如果我使用有问题的标识符并将其手动插入到我的 sql 客户端中的查询中,它会起作用:
SELECT *
FROM TableOne T1
WHERE CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x'0213725502A3BC45706AEE6001';
但是,当我在我的 laravel 模型中尝试使用标识符作为参数时,它出错并显示 x:identifier
而不是 x,然后是字符串:
$sql = "SELECT *
FROM TableOne T1
WHERE CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x':identifier'
";
try {
return DB::connection('odbc')->select($sql, [
'identifier' => $identifier
]);
} catch (Exception $e) {
return false;
}
我怎样才能让这个参数正确地注入 x 以便它像手动一样工作?
以下查询应该对您有所帮助。我们可以将 table
和 whereRaw
链接起来。您不需要创建原始查询。
return DB::connection('odbc')->table('TableOne')
->whereRaw("CAST(IDENITIFIER AS CHAR(26) CCSID 65535) = x'?'",[$identifier])
->get();
我在从 laravel 中使用 CCSID 获取十六进制值的查询返回结果时遇到问题。如果我使用有问题的标识符并将其手动插入到我的 sql 客户端中的查询中,它会起作用:
SELECT *
FROM TableOne T1
WHERE CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x'0213725502A3BC45706AEE6001';
但是,当我在我的 laravel 模型中尝试使用标识符作为参数时,它出错并显示 x:identifier
而不是 x,然后是字符串:
$sql = "SELECT *
FROM TableOne T1
WHERE CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x':identifier'
";
try {
return DB::connection('odbc')->select($sql, [
'identifier' => $identifier
]);
} catch (Exception $e) {
return false;
}
我怎样才能让这个参数正确地注入 x 以便它像手动一样工作?
以下查询应该对您有所帮助。我们可以将 table
和 whereRaw
链接起来。您不需要创建原始查询。
return DB::connection('odbc')->table('TableOne')
->whereRaw("CAST(IDENITIFIER AS CHAR(26) CCSID 65535) = x'?'",[$identifier])
->get();