이 기사는 주로 php_pdo 준비된 명령문의 분석을 소개합니다. 이제는 모든 사람과 공유합니다.
많은 성숙한 데이터베이스가 준비된 명령문의 개념을 지원합니다. 전처리는 다양한 방법으로 구현할 수 있습니다. 이 글을 통해 php_pdo 전처리문에 대해 자세히 소개하고 있습니다. 필요한 친구들은 참고해 보세요.
이 글은 주로 php_pdo 전처리문을 소개합니다. 아래에서는 별로 설명할 것이 없지만, 자세한 내용을 살펴보겠습니다.
1. 준비된 문은 두 가지 주요 이점을 가져올 수 있습니다.
1. 쿼리는 한 번만 구문 분석(또는 전처리)하면 되지만 동일하거나 다른 매개 변수를 사용하여 여러 번 실행할 수 있습니다. 쿼리가 준비되면 데이터베이스는 쿼리 실행 계획을 분석, 컴파일 및 최적화합니다. 복잡한 쿼리의 경우 이 프로세스에 오랜 시간이 걸리며, 동일한 쿼리를 다른 매개변수로 여러 번 반복해야 하는 경우 이 프로세스로 인해 애플리케이션 속도가 크게 느려집니다. 준비된 문을 사용하면 반복적인 분석/컴파일/최적화 주기를 피할 수 있습니다. 즉, 준비된 명령문은
때문에 더 적은 리소스를 사용하고 더 빠르게 실행됩니다.
2. 준비된 명령문에 제공된 매개변수는 따옴표로 묶을 필요가 없으며 드라이버가 자동으로 처리합니다. 애플리케이션이 준비된 명령문만 사용하는 경우 SQL 주입이 발생하지 않는다고 확신할 수 있습니다. (그러나 쿼리의 다른 부분이 이스케이프되지 않은 입력으로 구성되면 여전히 SQL 주입 위험이 있습니다.)
<?php //?号式的预处理语句 一共有3种绑定方式 //1.连接数据库 try{ $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root",""); }catch(PDOException $e){ die("数据库连接失败".$e->getMessage()); } //2.预处理的SQL语句 $sql = "insert into stu(id,name,sex,age) values(?,?,?,?)"; $stmt = $pdo->prepare($sql); //3.对?号的参数绑定 //(第一种绑定方式) /* $stmt->bindValue(1,null); $stmt->bindValue(2,'test55'); $stmt->bindValue(3,'w'); $stmt->bindValue(4,22); */ //第二种绑定方式 /* $stmt->bindParam(1,$id); $stmt->bindParam(2,$name); $stmt->bindParam(3,$sex); $stmt->bindParam(4,$age); $id=null; $name="test66"; $sex="m"; $age=33; */ //第三种绑定方式 //$stmt->execute(array(null,'test77','22',55)); //4.执行 $stmt->execute(array(null,'test77','22',55)); echo $stmt->rowCount();
<?php //别名式号式的预处理语句 一共有3种绑定方式 //1.连接数据库 try{ $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root",""); }catch(PDOException $e){ die("数据库连接失败".$e->getMessage()); } //2.预处理的SQL语句 $sql = "insert into stu(id,name,sex,age) values(:id,:name,:sex,:age)"; $stmt = $pdo->prepare($sql); //3.对?号的参数绑定 //(第一种绑定方式) /* $stmt->bindValue("id",null); $stmt->bindValue("name",'ceshi1'); $stmt->bindValue("sex",'w'); $stmt->bindValue("age",22); */ //第二种绑定方式 /* $stmt->bindParam("id",$id); $stmt->bindParam("name",$name); $stmt->bindParam("sex",$sex); $stmt->bindParam("age",$age); $id=null; $name="ceshi2"; $sex="m"; $age=33; */ //第三种绑定方式 //$stmt->execute(array(null,'test77','22',55)); //4.执行 $stmt->execute(array("id"=>null,"name"=>"ceshi3","sex"=>"w","age"=>66)); echo $stmt->rowCount();
<?php //采用预处理SQL执行查询,并采用绑定结果方式输出 //1.连接数据库 try{ $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root",""); }catch(PDOException $e){ die("数据库连接失败".$e->getMessage()); } //2.预处理的SQL语句 $sql = "select id,name,sex,age from stu"; $stmt = $pdo->prepare($sql); //3.执行 $stmt->execute(); $stmt->bindColumn(1,$id); $stmt->bindColumn(2,$name); $stmt->bindColumn("sex",$sex); $stmt->bindColumn("age",$age); while($row=$stmt->fetch(PDO::FETCH_COLUMN)){ echo "{$id}:{$name}:{$sex}:{$age}<br>"; } /* foreach($stmt as $row){ echo $row['id']."--------".$row['name']."<br>"; } */가장 좋은 방법:
//1.连接数据库 try{ $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root",""); }catch(PDOException $e){ die("数据库连接失败".$e->getMessage()); } //2.预处理的SQL语句 $sql = 'select catid,catname,catdir from cy_category where parentid = :parentid'; $stmt = $pdo->prepare($sql); $params = array( 'parentid' => $subcatid ); $stmt->execute($params); //$row = $stm->fetchAll(PDO::FETCH_ASSOC); while($row=$stmt->fetch(PDO::FETCH_ASSOC)){ var_dump($row); echo "<br>"; }
전처리 일괄 작업 예:
<?php //用预处理语句进行重复插入 //下面例子通过用 name 和 value 替代相应的命名占位符来执行一个插入查询 $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); // 插入一行 $name = 'one'; $value = 1; $stmt->execute(); // 用不同的值插入另一行 $name = 'two'; $value = 2; $stmt->execute(); //用预处理语句进行重复插入 //下面例子通过用 name 和 value 取代 ? 占位符的位置来执行一条插入查询。 $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); $stmt->bindParam(1, $name); $stmt->bindParam(2, $value); // 插入一行 $name = 'one'; $value = 1; $stmt->execute(); // 用不同的值插入另一行 $name = 'two'; $value = 2; $stmt->execute(); //使用预处理语句获取数据 //下面例子获取数据基于键值已提供的形式。用户的输入被自动用引号括起来,因此不会有 SQL 注入攻击的危险。 $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); if ($stmt->execute(array($_GET['name']))) { while ($row = $stmt->fetch()) { print_r($row); } } ?>위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요! 관련 권장 사항:
PHP를 사용하여 간단한 앱 인터페이스를 작성하는 방법
위 내용은 php_pdo 준비된 명령문 분석 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!