mysql准备好的语句是否有编号的占位符

时间:2018-12-18 08:14:59

标签: mysql prepared-statement

我正在尝试使用mysql准备好的语句。 我想知道是否可以在sprintf或vsprintf中使用编号占位符。 例如:

<?php
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location);
?>

1 个答案:

答案 0 :(得分:1)

这取决于您在PHP中使用哪个SQL库。

如果使用PDO库,则可以使用命名参数,这与使用数字是一样的。 http://php.net/manual/en/pdostatement.bindparam.php给出了一个示例:

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

在上文中,由于参数是命名的,因此按什么顺序提供“卡路里”和“颜色”变量,或它们在语句中出现的位置都没有关系。

但是mysqli不支持此功能,相反,您必须使用简单的?占位符,然后按照要使用的确切顺序提供参数-请参见http://php.net/manual/en/mysqli-stmt.bind-param.php