이전 글에서는 MySQL의 기본 지식에서 MySQL의 설치와 기본 동작(주로 단일 SQL문의 쿼리 동작)에 대해 이야기했습니다. 오늘은 MySQL의 매우 중요한 부분인 전처리에 대해 소개합니다.
Mysqli 작업에는 종종 MySQLi 클래스, MySQL_STMT 클래스 및 MySQLi_RESULT 클래스의 세 가지 주요 클래스가 포함됩니다. 전처리는 주로 MySQL_STMT 클래스를 사용하여 수행됩니다.
전처리는 SQL 주입을 방지하는 중요한 수단이며 웹사이트 보안을 향상시키는 데 큰 의미가 있습니다.
이 글의 경우는 데이터베이스 이름이 test이고, 데이터 테이블 이름이 test이고, 필드에 id와 title이 포함되고, id가 자동 증가 기본 키인 경우입니다.
<?php define("HOST", "localhost");define("USER", 'root');define("PWD", '');define("DB", 'test');$mysqli=new Mysqli(HOST,USER,PWD,DB);if ($mysqli->connect_errno) { "Connect Error:".$mysqli->connect_error; }$mysqli->set_charset('utf8');$id='';$title='title4';//用?代替 变量$sql="INSERT test VALUES (?,?)";//获得$mysqli_stmt对象,一定要记住传$sql,预处理是对sql语句的预处理。$mysqli_stmt=$mysqli->prepare($sql);//第一个参数表明变量类型,有i(int),d(double),s(string),b(blob)$mysqli_stmt->bind_param('is',$id,$title);//执行预处理语句if($mysqli_stmt->execute()){ echo $mysqli_stmt->insert_id; }else{ echo $mysqli_stmt->error; }$mysqli->close();
mysqli 사전 처리를 사용하여 SQL 주입 방지:
$id='4';$title='title4';$sql="SELECT * FROM test WHERE id=? AND title=?";$mysqli_stmt=$mysqli->prepare($sql);$mysqli_stmt->bind_param('is',$id,$title);if ($mysqli_stmt->execute()) { $mysqli_stmt->store_result(); if($mysqli_stmt->num_rows()>0){ echo "验证成功"; }else{ echo "验证失败"; } } $mysqli_stmt->free_result(); $mysqli_stmt->close();
mysqli 사전 처리를 사용하여 쿼리 문 실행:
$sql="SELECT id,title FROM test WHERE id>=?";$mysqli_stmt=$mysqli->prepare($sql);$id=1;$mysqli_stmt->bind_param('i',$id);if($mysqli_stmt->execute()){ $mysqli_stmt->store_result(); //将一个变量绑定到一个prepared语句上用于结果存储 $mysqli_stmt->bind_result($id,$title); while ($mysqli_stmt->fetch()) { echo $id.' :'.$title.'<br/>'; } }
위 내용은 php mysqli 확장의 전처리 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!