1

私は現在、php でデータベース アクセスと管理クラスの小さなセットに取り組んでいます。よく知られている mysqli をよりよく理解しようとしていますが、mysqli_stmt::bind_param で定義された変数型が現在のアプリケーション内でセキュリティ/ユーティリティを強化できる理由と方法を理解できていません。

mysql ステートメントを実行する利点は明らかです。クエリと値は 2 つの異なるパスで送信されます。これにより、アプリケーションの安全性とエラー防止性が向上します。しかし、これらの変数はどうなりますか? これらは php によって事前にチェックされますか、それとも mysql でチェックされますか?

mysqliが何かをするのが面倒なだけですか?

!is_numeric($v) && ( !is_null($v) || $v != “NULL”) ? “‘$v’” : $v 

または、私が知らないmysql側にvar型定義がありますか?

“PREPARE stmt_name FROM … “;
“SET @var1 = 3”;
“SET @var2 = ‘foo’”;
“EXECUTE stmt_name USING @var1, @var2”;

この値についてはあまり進んでいないようです。文字列として渡されたものはすべて適切に評価されます…では、なぜわざわざ?

これに関連しているにもかかわらず、別の副次的な質問があります: パケットで blob 文字列を送信する mysqli の方法を複製する方法はありますか?

ありがとさよなら

4

1 に答える 1

3

誰もまだ答えを出していないので...私は今答えを持っています! bind_param 内のデータ型定義は、これらの引用符をクエリに追加するだけではありませんが、変数は、php スクリプトがこれまでに可能であったよりも低いレベルでバインドされています! 正式には、mysqli/pdo 以外の別のパスを経由することは、すべてのデータを文字列で転送することを意味します!

以上です、乾杯!

于 2012-11-27T20:57:17.567 に答える