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

时间:2012-09-03 03:41:17

标签: php pdo hex

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

select * from users where uuid = 0x1e8ef774581c102cbcfef1ab81872213;

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

select * from users where uuid = :uuid

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

Array ( [:uuid] => 0x1e8ef774581c102cbcfef1ab81872213 ) 

当我调用fetchAll:

时,看起来这个查询正在mysql服务器上执行
select * from users where uuid = '0x1e8ef774581c102cbcfef1ab81872213';

如果不让PDO在我的十六进制中添加引号,我该如何执行查询?

谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:0)

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

e.g。跳过占位符并直接将其嵌入查询字符串中:

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

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

您没有提到您正在使用的DBMS,但您可以通过利用DBMS的强制转换功能来解决这个问题,例如。

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

有了这个,即使它作为一个字符串进入数据库,当推动推进时它将被视为本机uuid。