我在以下代码中绑定null参数时遇到问题
$nullVariable = NULL; $sql = new PDO('MysqL:host=' . $Server,$User,$Password); $sql->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $statement = $sql->prepare("SELECT * FROM Table WHERE Binary16Column = :uuid"); $statement->bindParam(":uuid",$nullVariable,PDO::PARAM_NULL); $statement->execute(); $results = $statement->fetchAll(PDO::FETCH_ASSOC);
结果变量将是一个空数组.如果我不使用参数并将我的查询修改为“WHERE Binary16Column IS NULL”,则返回预期的行数.所以问题必须在于我如何处理参数,而不是我的SQL查询.
我的代码比上面列出的更复杂,我需要能够使用可能为null的参数变量,因此检查查看变量是否为null并且运行不同的查询不太理想.从技术上讲,我有自己的设置参数的功能,这是我检查变量的内容是否为空,并适当地绑定参数,所以我不必编写不必要的查询数.如果变量包含有效数据,并且参数类型为PARAM_LOB,则查询工作也可以正常工作.
有谁知道我做错了什么?非常感谢!
阅读
three-valued logic. NULL不是一个值;它是缺少值的标记,因此NULL永远不会等于任何东西,包括它自己.
原文链接:https://www.f2er.com/php/135195.html但是,有一个零安全比较运算符,也称为“太空船运算符”,它确实认为两个空值是等价的.
WHERE Binary16Column <=> :uuid
……应该按照你的预期行事.