2

我正在尝试使用 PDO 执行此查询:

select * from users where uuid = 0x1e8ef774581c102cbcfef1ab81872213;

我将此 SQL 查询传递给 PDO 的 prepare 方法:

select * from users where uuid = :uuid

然后我传递这个哈希图来执行:

Array ( [:uuid] => 0x1e8ef774581c102cbcfef1ab81872213 ) 

当我调用 fetchAll 时,看起来这个查询正在 mysql 服务器上执行:

select * from users where uuid = '0x1e8ef774581c102cbcfef1ab81872213';

如何在不让 PDO 在我的十六进制周围添加引号的情况下执行查询?

谢谢,史蒂夫

4

1 回答 1

0

您的值必须作为字符串插入,因为它远远超出(128 位)在 64 位和 32 位版本的 PHP 中可以表示为正常数字的值。

例如跳过占位符并将其直接嵌入到查询字符串中:

$uuid = '0x....';
$sql = "SELECT ... WHERE uuid = $uuid";

这意味着您将失去占位符的好处,并且必须直接处理 SQL 注入缓解。

您没有提及您正在使用哪个 DBMS,但您可以通过利用 DBMS 的强制转换功能来绕过它,例如。

SELECT... WHERE uuid = CAST(:uuid AS uuid_type)

有了这个,即使它作为一个字符串进入数据库,它也会在关键时刻被视为原生 uuid。

于 2012-09-03T03:48:20.970 回答