作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
占位符表示为了执行查询,将会向该位置插入对应的文字。通过将其从查询本身中分离出来,我们允许数据库区分SQL语法与用户输入值,因此可以避免SQL注入。
<?php
$result = db_query("SELECT nid, title FROM {node} WHERE created > :created", array(
':created' => REQUEST_TIME - 3600,
));
?>
上面的代码,将选择过去一小时(3600秒)内创建的所有节点。在查询运行时,占位符:created将会被动态的替换为REQUEST_TIME – 3600的当前值。一个查询可以包含任意多个占位符,但是占位符之间,即便是它们的值相同,但是它们的名字必须是唯一的。根据具体情况,占位符数组可以内联指定(如上例所示),也可以先构建好,然后再传递过来。数组内,元素的顺序对结果并不影响。
以"db_"开头的占位符是为内部系统所保留的,绝不应该在自定义模块中使用。
无论占位符的类型如何,它们都不能被转义或者添加引号。这是因为它们是单独传递给数据库的,数据库服务器可以区分查询字符串和占位符的对应值。
<?php
// 错误:
$result = db_query("SELECT nid, title FROM {node} WHERE type = ':type'", array(
':type' => 'page',
));
// 正确:
$result = db_query("SELECT nid, title FROM {node} WHERE type = :type", array(
':type' => 'page',
));
?>