>백엔드 개발 >PHP 튜토리얼 >MySQL 전처리 기술에 대한 팁

MySQL 전처리 기술에 대한 팁

一个新手
一个新手원래의
2017-09-13 09:48:351600검색

 먼저 전통적인 데이터베이스 운영 방식을 살펴보겠습니다.

데이터베이스를 운영하는 전통적인 방법에는 두 가지가 있습니다.

  1. 먼저 sql 문을 작성한 다음 mysqli->query($sql)을 통해 데이터베이스를 운영합니다. (여기서 저자는 mysqli 확장 라이브러리를 사용합니다.) . 이 작업에는 아무런 문제가 없지만 수천, 수만 개의 데이터를 삽입하고 싶다면 어떻게 해야 할까요? 아직도 이렇게 SQL 문을 작성하고 데이터베이스를 운영해야 하나요? 그러면 어떤 사람들은 두 번째 방법인 여러 sql 문을 조작하는 mysqli 고유의 방법을 사용하는 것이 더 쉽다고 말할 것입니다.

  2. 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="color: #000000">  代码如下:<br>  </span>

d7142f12e3aaf4023d724e093ce2bf68connect_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"."0c6dc11e160d3b678d68754cc175188a";
}//关闭资源$mysqli_stmt->free_result();//关闭预编译语句,否则数据库会一直保存$mysqli_stmt->close();//关闭连接$mysqli->close();
삽입보다 쿼리가 더 많다고 볼 수 있습니다그런 코드인데, 이 코드는 무엇을 의미하나요?

데이터베이스를 쿼리할 때 데이터베이스는 필연적으로 결과 집합을 반환한다고 상상할 수 있으므로 결과의 일부 데이터를 얻으려면 이 문장을 추가해야 합니다. 그렇다면 이 매개변수는 무엇을 의미할까요? 이 SQL 문을 보면, Bind_result의 매개변수가 SQL 문에서 쿼리하려는 필드(이름, 성별, 나이)와 일대일로 대응되는 것을 알 수 있습니다. Bind_result는 sql과 동일할 필요는 없지만 명령문의 필드 이름은 동일하지만 일반적으로 권장됩니다.

말할 것도 많지 않습니다. 위의 그림은 다음과 같이 이해될 수 있습니다.


$name, $sex, $age는 참조로 전달되며 각각 첫 번째 열 주소를 가리키는 포인터와 동일합니다. 결과 집합의 행, 각 실행 while 문이 실행되면 포인터가 아래쪽으로 이동합니다

이렇게 하면 각 행의 데이터가 다음과 같이 인쇄됩니다.

동시에, 최우선 순위인 세 가지 클로저를 잊지 마세요.

위 내용은 MySQL 전처리 기술에 대한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.