php - 使用之间的差异?和 :param in prepare statement

标签 php database pdo prepared-statement named-parameters

假设我想选择 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/

相关文章:

php - 使用 php 和 mysql 时出现 WHERE email NOT IN (%s) 问题

php - 根据条件替换字符串(正则表达式?)

php DAL - 独立的实体和数据库?

database - Peta poco - ExecuteReader 需要一个开放且可用的连接

php - 如何使用 PDO 在 MySQL 中存储 BIGINT?

php - 如何从递归层次结构中查找位置,父子关系mysql

javascript - 如何在php、jquery中设置任何浏览器的默认下载目录

mysql - 从 MySQL 中的日期时间计算月份数

php - PDO mysql 显示 COUNT DISTINCT

php - 直接使用函数返回而不使用变量