企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
就是,为了“重复执行”多条结构类似的sql语句,而将该sql语句的形式“进行预先处理” 该sql语句的“形式”中,含有“未给定的数据项”。 然后,到正式执行的时候,只要给定相应的形式上的“数据项”,就可以更快速方便执行。 比如(有两种预定义语法): 语法1: $sql = “select \* from tab where id = ? “; //这里这个“?”就是未给定的数据项;这里通常叫做“占位符”//也可以是多个问好。 语法2: $sql = “select \* from tab where id = :v1 and name = :v2 “; //这里这个“:v1”和 “:v2” 就是未给定的数据项;通常这里叫做“命名参数”; #### 使用 1,对含预处理语法的sql语句进行“预处理”: $stmt = $pdo->prepare( $sql ); 2, 对上述预处理的结果对象($stmt)的未赋值数据,进行赋值: $stmt->bindValue( 数据项1, 值1); $stmt->bindValue( 数据项2, 值2); 3, 执行:$stmt->execute(); 这样之后,该sql语句就算正式完成! ![Image](https://box.kancloud.cn/0b8e65852ff960e453ba516885d642cb_347x315.png) 问题:在预处理功能使用时,应该使用文本标识还是使用问号呢? 答:对于这个问题,没有严格的规定,你既可以使用文本标识也可以使用问号,两者的功能都是一致的,唯一的不同就是语法的不同。 ① 如果使用文本标识,其在数据传递时,要求数组是一个关联型数组 ② 如果使用问号标识,其在数据传递时,要求数组是一个索引型数组,索引从0开始 #### 占位符的处理形式 ![Image](https://box.kancloud.cn/3af406bbc47c1558fcd14a36afd04791_754x228.png) #### 命名参数的处理形式 ![Image](https://box.kancloud.cn/f147b51614399db0abdfba494ec5af5f_749x220.png) #### 使用bindParam实现参数绑定 要使用到的知识点: • bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable) 主要功能:实现对参数的绑定 参数说明: $parameter :要绑定的参数 特别注意:如果以上参数,使用的是?问号标识,其绑定时索引是从1开始的! &$variable :要设置的参数值,按引用传递 ![Image](https://box.kancloud.cn/85065b477cd68a01b56442751bf3ad1c_468x341.png) ![Image](https://box.kancloud.cn/ad3cd34dc2a590f0d4966f8b5de659bd_387x351.png) 如果要重复就重复第6步