💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 1、SQL语句执行过程 * SQL语句的执行,分成两个阶段:编译和执行。 * 如果SQL语句,是第1次执行,先编译再执行。编译过程十分复杂,耗用系统资源,相对不太安全; * 如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取,无疑执行效率是最高的,也是比较安全的,可以有效避免SQL注入等安全问题; ![](https://img.kancloud.cn/ea/9f/ea9f28c2892124a1f87d1ba2acc10fa4_372x387.png) ## 2、PDO的SQL语句预处理步骤 (1)PDO完成预处理需要的步骤 * 先提取相同结构的sql部分!(将数据部分,可变的部分去掉) * 编译这个相同的结构!将编译结果保存! * 再将不同的数据部分进行替换! * 执行即可! (2)提取相同结构的SQL语句 * 在SQL语句中,使用命名参数和问号参数,来代替可变的数据。 * 使用占位符“:value”和“?”来代替可变的数据。 ![](https://img.kancloud.cn/5b/a2/5ba2c7f3bcf9ecec05af7fffc518c052_1036x78.png) (3)预编译相同结构的SQL语句 * 描述:执行预编译的SQL语句结构,并返回一个PDOStatement对象。 * 语法: ``` public PDOStatement PDO::prepare ( string $statement ) ``` * 返回:执行成功返回PDOStatement对象,失败返回FALSE。 ![](https://img.kancloud.cn/b9/66/b9668a4df5e4db391b4ab56e26458393_1022x143.png) (4)给占位符绑定数据 * 描述:绑定一个值到预处理的 SQL 语句中的对应命名占位符或问号占位符。 * 语法: ``` bool PDOStatement::bindValue ( mixed $parameter , mixed $value ) ``` * 参数: $parameter,参数标识符。对于使用命名占位符的预处理语句,应是类似 :name 形式的参数名。对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。 $value,绑定到参数的值; 返回:成功时返回 TRUE, 或者在失败时返回 FALSE。 ![](https://img.kancloud.cn/68/11/68116d9b4a679180550e8afdc1c95613_891x261.png) (5)执行预处理的SQL语句 * 描述:执行一条预处理语句 * 语法: ``` bool PDOStatement::execute( ) ``` * 返回:成功时返回 TRUE, 或者在失败时返回 FALSE。 ![](https://img.kancloud.cn/29/c8/29c85ad2aab63f468627a6b1764de2b2_642x50.png) ## 3、实例:PDO的SQL语句预处理 ![](https://img.kancloud.cn/75/0d/750d438ffe222126fd739a0290ff71ff_843x513.png)