我很少自己手动用 PDO ,基本都是用 MYSQLi ,所以没遇到楼主问题
我仔细看了一下 PDO 的 bind 的几个方法的手册,没看到楼主这种绑定为 false 的用法,所以我想问一下楼主这种用法有没有可靠的出处?
因为至少我用的 5.5 版里, MYSQL 并没有原生的 BOOLEAN 的类型, BOOLEAN 的类型就是个 tinyint (1 ), 0 为 false ,其他为 true 。首先你指定了传进去的变量强制类型 PDO::PARAM_BOOL 这个常量的调用,我在我庞大的参与过的 MYSQL 的项目库的代码里搜索都没见过有人用,然后把一个要代入生成 SQL 语句的参数传入一个表示否定的 false ,在没有手册详细说这种用法的前提下,这个 false 到底会被怎么解释?这个变量舍弃?还是传入这个变量是空?还是代入一个 0 ?所以我觉得得到任何乱七八糟的结果都不奇怪。
然后就是你到底是啥需求?想取出 email 是空的?那正常的 SQL 语句你设想的是啥样的?
select * from table where email = NULL ?这个应该用
PDO_PARAM_NULL ,传入 NULL 处理
还是想要找为空字符串的(非 NULL )?那就传入一个空字符串 ""
然后是调试建议:
1.
$query->bindParam (1, $email, PDO::PARAM_BOOL );
这个绑定改成
$debug=$query->bindParam (1, $email, PDO::PARAM_BOOL );
然后输出一下这个$debug 确认绑定操作是否返回 true ,这个绑定是否生效存疑
2. 使用 debugDumpParams 输出一下 stmt 的情况
http://php.net/manual/zh/pdostatement.debugdumpparams.php