在PHP中使用PDO查询十六进制数字-PDO总是在十六进制数字周围添加引号


Query with hex number using PDO in PHP - PDO always add quotes around the hex number?

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

select * from users where uuid = 0x1e8ef774581c102cbcfef1ab81872213;

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

select * from users where uuid = :uuid

然后我传递这个hashmap来执行:

Array ( [:uuid] => 0x1e8ef774581c102cbcfef1ab81872213 ) 

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

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

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

谢谢,Steve

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

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

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

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

你没有提到你正在使用哪一个DBMS,但你可以通过利用你的DBMS的转换函数来绕过它,例如

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

这样,即使它以字符串的形式进入数据库,在紧要关头,它也会被视为本地uuid。