我正在尝试使用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在我的十六进制中添加引号,我该如何执行查询?
谢谢, 史蒂夫
答案 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。