まず、データベースを運用する従来の方法を見てみましょう。
データベースを操作するには 2 つの伝統的な方法があります:
まず SQL ステートメントを作成し、次に mysqli->query($sql) を通じてデータベースを操作します (著者はここで mysqli 拡張ライブラリを使用しています) 。この操作には何も問題はありませんが、数千または数万のデータを挿入する場合はどうすればよいでしょうか?やはりこのようなSQL文を書いてデータベースを操作しなければならないのでしょうか?それなら、複数の SQL ステートメントを操作する mysqli 独自の方法 (2 番目の方法) を使用する方が簡単だという人もいるでしょう。
mysqli->multi_query($sql), これは、次のように複数の SQL ステートメントを操作するメソッドです。 これだと思うならオーケー、問題を完全に解決したら、あなたは間違っています。 次に、MySQL データベースが 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 ステートメントでクエリするフィールド (名前、性別、年齢) に 1 対 1 で対応していることがわかります。 bind_result は SQL と同じである必要はありませんが、ステートメントのフィールド名は同じであることが一般的に推奨されます。
あまり言う必要はありませんが、上の図は次のように理解できます: $name、$sex、$age は参照によって渡され、最初の行の列アドレスを指します。 while ステートメントが実行されると、ポインタが下に移動します
。同時に最優先の3つのクロージングも忘れてはいけません。
以上がmysql 前処理テクノロジに関するヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。