我正在尝试使用mysql准备好的语句。 我想知道是否可以在sprintf或vsprintf中使用编号占位符。 例如:
<?php
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location);
?>
答案 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。