使用之间的差异?并且:准备声明中的参数

Cod*_*fee 9 php database pdo prepared-statement named-parameters

假设我想选择记录在哪里Id = 30.准备语句允许两种绑定参数的方式:

问号

$id = 30;
$q = $conn->prepare("SELECT * FROM pdo_db WHERE id > ?");
$q->execute(array($id));  // Here above ID will be passed 
Run Code Online (Sandbox Code Playgroud)

命名参数

$sth = $conn->prepare("SELECT `id`, `title` FROM `pdo_db` WHERE `id` > :id");
$sth->execute(array(
  ':id' => 30
));
Run Code Online (Sandbox Code Playgroud)

两者都工作正常,并给出准确的结果,但我无法得到这两者之间的确切差异,也不能在我应该使用其中一个?

N.B*_*.B. 7

问号参数称为位置参数.

使用:和名称定义的参数称为命名参数.

规则是你不能在准备好的陈述中混合使用这两者.

位置参数以一种简单的方式工作 - 如果您有两个位置参数,则可以指定具有两个元素的数组.数组值将按照它们出现在数组中的顺序绑定.

命名参数有点棘手,它们不必按照它们出现的顺序绑定.您也可以在语句中多次重复一个命名参数,但是您只能将其绑定一次以传递该值 - 当PDO设置为仿真时,最后一部分可以工作$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);.