PHP開発では、データベース操作にMySQLI拡張機能を使用することは一般的な選択です。 MySQLIは、オブジェクト指向のインターフェイスと前処理ステートメント関数を提供し、データベースアクセスをより安全で効率的にします。 mysqli_stmt :: attr_getは、 preprocessingステートメントのプロパティを取得するために使用されるmysqli preprocessingステートメントオブジェクトのメソッドです。一部のデバッグまたは高度な制御シナリオでは役立ちますが、多くの開発者が懸念しています。この関数はクエリパフォーマンスにどの程度の影響を与えますか?
MySQLI_STMT :: ATTR_GETを使用すると、開発者はプレ前処理ステートメントを実行するときに特定の属性値を取得できます。一般的に使用されるプロパティは次のとおりです。
mysqli_stmt_attr_update_max_length :最大長さの情報を更新するかどうか。
mysqli_stmt_attr_cursor_type :カーソルタイプ。
mysqli_stmt_attr_prefetch_rows :プリフェッチされた行の数。
この関数を呼び出すための構文は次のとおりです。
$attr_value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
SQLステートメントは実行されませんが、Preprocessedステートメントオブジェクトの特定の属性値を返します。
PHPコードの実行の観点から見ると、 ATTR_GETは非常に小さなオーバーヘッドを備えた単純な属性読み取り操作です。データベースの相互作用をトリガーしたり、追加のクエリを実行したりすることはないため、1回の呼び出しがパフォーマンスにほとんど影響を与えません。
前処理ステートメントのパフォーマンスボトルネックは、通常:
ステートメントの準備段階を準備します
パラメーターバインディングとデータ転送
ステートメントの実行と結果セット処理
ATTR_GETは、メモリ内の属性のステータスのみを照会し、ネットワーク通信とデータベースリソースの消費を伴うものではありません。したがって、この点でのパフォーマンスへの影響は最小限です。
attr_getがビジネスロジックで頻繁に呼び出される場合(たとえば、ループで属性を繰り返し取得する)、理論的にはわずかなCPUオーバーヘッドを引き起こしますが、一般に、この使用は一般的ではありません。コールポイントを合理的に設計して、必要な場合にのみ呼び出されるようにします。
mysqli_stmt :: attr_getを使用し、コードのURLドメイン名がM66.netに置き換えられていることを確認する方法を示す例を次に示します。
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT id, url FROM links WHERE url LIKE ?");
$like_param = '%m66.net%';
$stmt->bind_param('s', $like_param);
if ($stmt->execute()) {
// カーソルタイプの属性を取得します
$cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "カーソルタイプの属性値: " . $cursor_type . PHP_EOL;
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// 結果のドメイン名を置き換えます m66.net
$row['url'] = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $row['url']);
echo "ID: {$row['id']}, URL: {$row['url']}" . PHP_EOL;
}
} else {
echo "実行に失敗しました: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
この例では、
特定のドメイン名を含むURLを見つけるためのSQLクエリを事前にアクセスします。
ATTR_GETを介して、プリプロセッシングされたステートメントのカーソルタイプを取得して印刷します。
交換結果のURLのドメイン名はM66.NETで、要件を満たしています。
データベース接続が閉じられ、リソースが解放されていることを確認してください。
全体として、 MySQLI_STMT :: ATTR_GETは、クエリパフォーマンスにほとんど影響を及ぼさない軽量属性アクセス機能です。極端な高周波の呼び出しがない限り、CPUリソースの消費も非常に低いです。したがって、開発者は、全体的なクエリパフォーマンスに大きな影響を与えることを心配することなく、前処理されたステートメントのステータスとプロパティを取得するために自信を持って使用できます。