要在表中查找用户,请使用PDO预处理语句:
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password");
$stmt = $pdo->prepare("SELECT surname, username FROM users
WHERE (username=:u OR surname LIKE :sn);");
要在此处指定命名参数:u和:sn,这两种方式都可以产生良好的效果。
首先,冒号位于变量名称:u 和:sn 之前:
$stmt->execute(array(
":u" => "johndoe2"
, ":sn" => "%super%"
));
或使用裸变量名 u 和 sn :
$stmt->execute(array(
"u" => "johndoe2"
, "sn" => "%super%"
));
哪种语法是标准的,首选?
答案 0 :(得分:3)
查看bindParam的文档:
参数标识符:
对于使用命名占位符的预准备语句,这将是一个 表单的参数名称:name。对于准备好的声明使用 问号占位符,这将是1的索引位置 参数。
答案 1 :(得分:1)
您可以安全地使用其中之一,因为如果找不到一个冒号机制,绑定机制将只使用冒号为您的参数名称添加前缀。
请参阅https://github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c#L363
if (is_param && param->name[0] != ':') {
char *temp = emalloc(++param->namelen + 1);
temp[0] = ':';
memmove(temp+1, param->name, param->namelen);
param->name = temp;
} else {
param->name = estrndup(param->name, param->namelen);
}
我更喜欢使用前者,因为我觉得我节省了极少量的周期。