Php 为什么mysqli绑定函数不能正确处理我的字符串?

Php 为什么mysqli绑定函数不能正确处理我的字符串?,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我花了一个月的时间才弄明白如何在PHP中使用会话处理函数。我只有一个问题,bind_param函数使用I来获取记录,而不是s $stmt = $mysqli->prepare("SELECT data FROM session WHERE id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); 此$id是一个会话id,其中包含以下数字和字母:e5eeire57wjeuewq8w即使我没有此会话的记录,此查询也会在nu

我花了一个月的时间才弄明白如何在PHP中使用会话处理函数。我只有一个问题,
bind_param
函数使用
I
来获取记录,而不是
s

$stmt = $mysqli->prepare("SELECT data FROM session WHERE  id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$id
是一个会话id,其中包含以下数字和字母:
e5eeire57wjeuewq8w
即使我没有此会话的记录,此查询也会在
num_行中返回大约8条记录。因此,我解决了这个问题,将
s
而不是
I
放在bind参数中

我的问题是,为什么bind param将我的字符串视为整数?为什么即使我有0行具有此id,它仍返回8行?

上有一条评论证实了Jon在评论中所说的话

PHP将自动将幕后的值转换为与绑定类型字符串对应的底层类型。i、 e:


它可能正在执行强制转换,当强制转换为int时,非数字字符串将导致0(注意,有一些注意事项,例如字符串以数字开头)。哦,谢谢你的回答。很难相信一个i而不是s会给我几天的时间来尝试使这个函数工作…@GabrielaDias老实说,如果你使用PHP足够长的时间,你将学会不再对PHP允许的类型感到惊讶conversion@Machavity是的,给用户一个随机会话会使我的会话不安全。。。就因为这个绑定参数。真的需要注意细节!非常感谢。我看到了身份证,放了一张。。。忘记这是一个会话id。。。解决这个问题太麻烦了。。。一个简单的例子会有很大的不同。
$var = true;
bind_param('i', $var); // forwarded to Mysql as 1