使用php bindParam时,冒号在:name中是什么意思

时间:2018-07-04 02:22:01

标签: php pdo

PHP手册为PDO bindParam语句提供了以下示例:

<?php
/* Execute a prepared statement by binding PHP variables */
$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();
?>

:冒号只是表示:colour是参数吗?

2 个答案:

答案 0 :(得分:0)

它映射到查询中的命名占位符。绑定不是必需的,如果不存在,驱动程序将自动添加它。

您的代码中有

$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
                     ^^^^^^^^^              ^^^^^^^

驱动程序以:和结尾的文本作为占位符读取任何内容。然后,它将内容与绑定的值交换,转义所有特殊字符,并用引号引起来。

所以您的bindparam拥有

:calories:colour,它们与每个匹配。假设$calorieso'brien。当查询转到数据库时,将是:

SELECT name, colour, calories
FROM fruit
WHERE calories < 'o\'brien'

PDO还支持未命名的占位符,它们只是问号?。您可以按位置绑定它们。

$sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?');

,然后使用1,因为它是第一个占位符。

$sth->bindParam(1, $calories, PDO::PARAM_INT);

此外,您可以将所有值作为数组传递给execute函数,并且它将完成绑定。

无论bindparam还是execute绑定,您都必须根据在查询中的使用方式来解决绑定问题。未命名为位置,按名称命名。

答案 1 :(得分:0)

参数

参数标识符。对于使用命名占位符的预备语句,这将是:name形式的参数名称。对于使用问号占位符的准备好的语句,这将是参数的1索引位置。

变量

绑定到SQL语句参数的PHP变量的名称。

有关参考http://php.net/manual/en/pdostatement.bindparam.php,请参见此处的文档。

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);

// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();