$stmt = $dbh->prepare( 'SELECT id, name FROM folders WHERE parent_folder_id = :id' );
$stmt->bindValue( ':id', $folder_id, PDO::PARAM_INT );
我上面有代码。如果一个文件夹有一个parent_folder_id,则意味着它在另一个文件夹中。如果此列为NULL,则表示它是一个根文件夹。
根据我的理解,如果$
folder_id为NULL,则将其视为0(因此,代码不会获得任何结果,因为该列中的值为NULL而不是0)。如果我将第三个参数更改为PDO ::
PARAM_NULL,仍然没有任何结果。我认为这是因为它将查询评估为“ WHERE parent_folder_id = NULL”,这与“ WHERE
parent_folder_id为NULL”不相同。
有没有一种方法可以让PDO正确处理此问题,或者如果将“ =”替换为“ is”并用正确的值替换bindValue第三个参数,我应该用内联创建我的SQL语句吗?
如果您使用的是MySQL,则可以使用非标准的NULL安全相等运算符<=>
,该运算符可以比较null值或非null值。
$stmt = $dbh->prepare( 'SELECT id, name FROM folders WHERE parent_folder_id <=> :id' );
$stmt->bindValue( ':id', $folder_id, PDO::PARAM_INT );
此运算符始终返回true或false,而不是NULL,这是您尝试将任何与equals进行比较的结果=
。
ANSI SQL定义了一个谓词IS [NOT] DISTINCT FROM
,其工作原理类似,但并非所有供应商都支持它。
问题内容: 我正在使用此代码,而我感到无奈: 它们全部失败并抛出此错误: 致命错误 :无法在/ opt / …中通过引用传递参数2 问题答案: 我只是在学习PDO,但我认为您需要使用,而不是 接受要引用的变量,并且在调用时不提取值。我在对php文档的评论中发现了这一点: 编辑:PS您可能会想这样做,但是它并不适合所有人(感谢您将Shaver进行举报。)
问题内容: 在这个查询中 我正在尝试将变量与PDO 绑定。不确定最后如何处理。 可不可能是 绑定到哪里 还是会 绑定到哪里 还是会完全不同? 问题答案: 您还可以说: 在MySQL末尾进行字符串连接,并不是在这种情况下有任何特殊原因。 如果要查找的部分本身可以包含百分比或下划线字符(因为这些字符对LIKE运算符具有特殊含义)或反斜杠(MySQL用作LIKE运算符的另一种转义层),则事情会变得更加棘
问题内容: 我正在使用PDO,是否需要清理GET参数? 我知道我是否比那不是问题。但是我的方式安全吗? 问题答案: 是的,这很安全。和之间的唯一区别是: 一次接受多个参数,而每个参数都必须 允许您指定参数类型,同时将所有内容绑定为字符串 将参数传递给通常是一个方便的快捷方式,它仍然是安全的。
问题内容: 我正在写一个小程序,用户必须猜一个数字。我希望他们输入他们正在猜测的数字,然后将玩家插入的值分配给变量x,以检查这是否是正确的值。如何获取插入的值并将其分配给x变量? 这是我到目前为止所拥有的: 问题答案: 这是一个简单的解决方案。将其环绕一段时间并始终设置
问题内容: 我想使用Java 7和NIO 2编写异步服务器。 但是我应该怎么用呢? 例如,如果我开始: 然后,当我这样做时,该程序 终止, 因为该调用是 异步的 。如果我将该代码置于无限循环中,则会抛出。 关于如何使用编写一个简单的异步服务器的任何建议? 这是我的完整示例(类似于JavaDoc中的示例): 问题答案: 您走在正确的轨道上,从完成的回调中调用accept()以便接受更多连接应该起作用
问题内容: 我试图将联系人保存在表中,但filechosser始终将其设置为所有文件。有没有办法我可以将其设置为仅接受.txt并将其设置为默认值或唯一选项。 问题答案: 您需要添加一个过滤器: