假设我想选择 Id = 30
的记录。准备好的语句允许两种方式绑定(bind)参数:
question marks
$id = 30;
$q = $conn->prepare("SELECT * FROM pdo_db WHERE id > ?");
$q->execute(array($id)); // Here above ID will be passed
named parameters
$sth = $conn->prepare("SELECT `id`, `title` FROM `pdo_db` WHERE `id` > :id");
$sth->execute(array(
':id' => 30
));
两者都工作正常并提供准确的结果,但我无法获得这两者之间的确切差异,也不知道何时应该使用其中一个或另一个?
最佳答案
问号参数称为位置参数。
用 :
和名称定义的参数称为命名参数。
规则是您不能在准备好的语句中混合使用这两者。
位置参数的工作方式很简单——如果您有两个位置参数,您可以指定一个包含两个元素的数组。数组值将按照它们在数组中出现的顺序进行绑定(bind)。
命名参数有点棘手,它们不必按照它们出现的顺序进行绑定(bind)。您还可以在语句中多次重复一个命名参数,但您只能绑定(bind)一次以传递值 - 当 PDO 通过 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,真);
。
关于php - 使用之间的差异?和 :param in prepare statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745823/