먼저 전통적인 데이터베이스 운영 방식을 살펴보겠습니다.
데이터베이스를 운영하는 전통적인 방법에는 두 가지가 있습니다.
먼저 sql 문을 작성한 다음 mysqli->query($sql)을 통해 데이터베이스를 운영합니다. (여기서 저자는 mysqli 확장 라이브러리를 사용합니다.) . 이 작업에는 아무런 문제가 없지만 수천, 수만 개의 데이터를 삽입하고 싶다면 어떻게 해야 할까요? 아직도 이렇게 SQL 문을 작성하고 데이터베이스를 운영해야 하나요? 그러면 어떤 사람들은 두 번째 방법인 여러 sql 문을 조작하는 mysqli 고유의 방법을 사용하는 것이 더 쉽다고 말할 것입니다.
mysqli->multi_query($sql), 다음과 같이 여러 개의 sql문을 연산하는 방법입니다. 이것이라고 생각해 알았어 문제를 완전히 해결했다면 틀렸다. 다음으로 MySQL 데이터베이스에서 sql 문을 실행하는 원리를 살펴보자!
위 그림에서 볼 수 있듯이 하나의 SQL 문을 보내든 여러 개의 SQL 문을 보내든 데이터베이스는 이를 하나씩 컴파일해야 합니다. 그러다가 데이터가 일정량에 도달하면 데이터베이스 오버헤드가 매우 커질 수밖에 없습니다. . 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 이때 전처리 기술이라는 개념이 도입됐다.<? = mysqli("localhost", "root", "123456", "student" (-> ("连接失败" . -> ->query("set names utf8" = "insert into student_info(name,age,sex,studentNo,grade) values (?,?,?,?,?)" = ->prepare( = "张三" = 30 = 0; = "1501222" = 89 ->bind_param("siisd", , , , , -> ->close();
等等,为什么values会是问号呢?这里的问号相当于一个占位符,之后只要向数据库发送数据就能够自动把数据对应的填充进去 这就是预编译技术的精髓之处,我们通过bind_param,顾名思义,就是绑定参数的意思,那么,它给谁绑定参数呢?看看上面的values (?,?,?,?,?),bind_param里面的参数一一对应 着values的每一个参数。那么bind_param里面的siisd又是什么意思呢?别急,请看下方: 参数有以下四种类型: i - integer(整型) d - double(双精度浮点型) s - string(字符串) b - BLOB(布尔值) 每个参数都需要指定类型。 通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险.
$mysqli_stmt->execute();
데이터를 데이터베이스에 전달하는 코드입니다.전처리된 데이터를 사용하여 데이터베이스 쿼리
<span style="max-width:90%"> 代码如下:<br/> </span>
<?php/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/7/21
* Time: 9:37 */$mysqli = new mysqli("localhost","root","123456","student");
if($mysqli->connect_error){
die("连接失败".$mysqli->error);
}
$mysqli->query("set names utf8");
$sql="select name,sex,age from student_info where id>?";
$mysqli_stmt=$mysqli->prepare($sql);
$id=1;$mysqli_stmt->bind_param("i",$id);
$mysqli_stmt->execute();//绑定结果集,传递的是引用$mysqli_stmt->bind_result($name,$sex,$age);
while($mysqli_stmt->fetch()){
echo "$name--$sex--$age"."<br>";
}//关闭资源$mysqli_stmt->free_result();//关闭预编译语句,否则数据库会一直保存$mysqli_stmt->close();//关闭连接$mysqli->close();
데이터베이스를 쿼리할 때 데이터베이스는 필연적으로 결과 집합을 반환한다고 상상할 수 있으므로 결과의 일부 데이터를 얻으려면 이 문장을 추가해야 합니다. 그렇다면 이 매개변수는 무엇을 의미할까요? 이 SQL 문을 보면, Bind_result의 매개변수가 SQL 문에서 쿼리하려는 필드(이름, 성별, 나이)와 일대일로 대응되는 것을 알 수 있습니다. Bind_result는 sql과 동일할 필요는 없지만 명령문의 필드 이름은 동일하지만 일반적으로 권장됩니다.
말할 것도 많지 않습니다. 위의 그림은 다음과 같이 이해될 수 있습니다.$name, $sex, $age는 참조로 전달되며 각각 첫 번째 열 주소를 가리키는 포인터와 동일합니다. 결과 집합의 행, 각 실행 while 문이 실행되면 포인터가 아래쪽으로 이동합니다
이렇게 하면 각 행의 데이터가 다음과 같이 인쇄됩니다.
동시에, 최우선 순위인 세 가지 클로저를 잊지 마세요.위 내용은 MySQL 전처리 기술에 대한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!