php - 使用php bindParam时:name中的冒号是什么意思
问题描述
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
是一个参数吗?
解决方案
这映射到查询中的命名占位符。绑定不需要它,如果不存在,驱动程序将自动添加它。
在您的代码中,您有
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
^^^^^^^^^ ^^^^^^^
:
驱动程序使用和尾随文本作为占位符读取任何内容。然后它将该内容与绑定的值交换,转义所有特殊字符,并引用字符串。
那么你bindparam
有
:calories
并且与:colour
其中的每一个相匹配。假设$calories
有o'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 = ?');
然后使用 a1
因为它是第一个占位符。
$sth->bindParam(1, $calories, PDO::PARAM_INT);
此外,您可以将所有值execute
作为数组传递给函数,它也会进行绑定。
无论是绑定bindparam
还是execute
绑定,您都必须通过在查询中如何使用绑定来解决绑定问题。未命名是位置,命名是按名称。
推荐阅读
- debugging - 按时间顺序对 Safari 调试器网络选项卡进行排序
- join - 使用 awk 合并多个管道分隔文件?
- c++ - C++ 函数重载和 initializer_list 构造函数
- jquery - .php 文件中的 Visual Studio Code jQuery 智能感知
- tfs - 是否可以将文件夹从一组 TFS 分支移动到另一组并保留挂起的更改?
- gradle - 使用实现项目时,传递引用在 gradle 中不起作用
- android - adb 的 Android 吐司
- node.js - 从 SFTP 下载文件并作为响应标头传递已停止工作
- javascript - 在多个子文件中使用从模块导入的类
- dataframe - 使用 Julia 中的列表对 DataFrame 进行子集化