【问题标题】:Laravel model, select query with hexadecimalLaravel 模型,选择十六进制查询
【发布时间】:2023-03-14 06:44:01
【问题描述】:

我在从 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 一起正确注入,以便它像手动一样工作?

【问题讨论】:

    标签: php sql laravel db2-400


    【解决方案1】:

    以下查询应该对您有所帮助。我们可以将tablewhereRaw 链接起来。您不需要创建原始查询。

     return DB::connection('odbc')->table('TableOne')
                        ->whereRaw("CAST(IDENITIFIER AS CHAR(26) CCSID 65535) = x'?'",[$identifier])
                        ->get();
    

    【讨论】:

    • 我试过这个,也试过用'?'在我原来的查询中。我得到一个错误,十六进制常数是 x'?无效
    • 原始查询对我有用,但我不知道如何正确附加 x 和参数
    • @TomN。将 ->get(); 替换为 ->toSql(); 看看显示给您的原始查询。我认为它应该与您所做的$sql 匹配。
    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 2018-07-26
    • 2011-12-09
    • 2023-03-27
    • 1970-01-01
    • 2014-08-24
    • 2014-04-20
    相关资源
    最近更新 更多