-1

要在表中查找用户,使用 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%"
));

或者使用裸变量名usn

$stmt->execute(array(
    "u" => "johndoe2"
  , "sn" => "%super%"
));

哪种语法是标​​准的和首选的?

4

2 回答 2

3

在文档中查找bindParam

参数标识符

对于使用命名占位符的准备好的语句,这将是一个形式为 :name 的参数名称。对于使用问号占位符的预处理语句,这将是参数的 1 索引位置。

于 2013-10-07T09:07:06.157 回答
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);
}

我更喜欢使用前者,因为我觉得我节省了极少的周期。

于 2013-10-11T06:33:29.470 回答