ホームページ  >  記事  >  バックエンド開発  >  mysql 前処理テクノロジに関するヒント

mysql 前処理テクノロジに関するヒント

一个新手
一个新手オリジナル
2017-09-13 09:48:351536ブラウズ

まず、データベースを運用する従来の方法を見てみましょう。

データベースを操作するには 2 つの伝統的な方法があります:

  1. まず SQL ステートメントを作成し、次に mysqli->query($sql) を通じてデータベースを操作します (著者はここで mysqli 拡張ライブラリを使用しています) 。この操作には何も問題はありませんが、数千または数万のデータを挿入する場合はどうすればよいでしょうか?やはりこのようなSQL文を書いてデータベースを操作しなければならないのでしょうか?それなら、複数の SQL ステートメントを操作する mysqli 独自の方法 (2 番目の方法) を使用する方が簡単だという人もいるでしょう。

  2. mysqli->multi_query($sql), これは、次のように複数の SQL ステートメントを操作するメソッドです。 これだと思うならオーケー、問題を完全に解決したら、あなたは間違っています。 次に、MySQL データベースが SQL ステートメントを実行する原理を見てみましょう。

  3. 上の図からわかるように、1つのSQL文を送信しても、複数のSQL文を送信しても、データベースはそれらを1つずつコンパイルする必要があり、データが一定量に達すると、必然的にデータベースのオーバーヘッドが非常に大きくなります。 。では、この問題をどうやって解決すればいいのでしょうか?このとき、前処理技術という概念が導入されました。

次に、前処理テクノロジーのコードを見てみましょう:

 <?         =  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 ステートメントでクエリするフィールド (名前、性別、年齢) に 1 対 1 で対応していることがわかります。 bind_result は SQL と同じである必要はありませんが、ステートメントのフィールド名は同じであることが一般的に推奨されます。

あまり言う必要はありませんが、上の図は次のように理解できます: $name、$sex、$age は参照によって渡され、最初の行の列アドレスを指します。 while ステートメントが実行されると、ポインタが下に移動します

このようにして、各行のデータを出力できます:

。同時に最優先の3つのクロージングも忘れてはいけません。

以上がmysql 前処理テクノロジに関するヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。