準備されたステートメントは、データベース操作にPHPのMySQLI拡張機能を使用する場合、安全で効率的な実行方法を提供します。 mysqli_stmt :: attr_getおよびmysqli_stmt_attr_update_max_lengthなどの関連属性は、事前処理ステートメントの一部のプロパティを取得または設定するためのインターフェイスです。ただし、この記事では、 mysql_stmt_attr_update_max_lengthがすべてのmysqlバージョンでサポートされているかどうか、およびmysqli_stmt :: attr_getを使用する際に何を注意すべきかについて詳しく説明します。
mysqli_stmt_attr_update_max_lengthは、mysqli_stmt :: store_result()を呼び出した後にmax_lengthフィールドの値が自動的に更新されるかどうかを制御するmysqli preprocessingステートメントの属性です。 max_lengthは、結果セットの列の最大長を表します。
デフォルトでは、MySQLIは結果を設定したときに最大長を更新しません。このプロパティをTrueに設定します。これにより、結果がキャッシュされた後に情報を自動的に更新できます。
実際、 MySQLI_STMT_ATTR_UPDATE_MAX_LENGTHはPHP MySQLI拡張レベルでの定数であり、基礎となるMySQLクライアントライブラリのサポートに依存しています。それはMySQLサーバー自体のプロパティではなく、クライアントがライブラリと対話するときのフラグです。
MySQL Serverバージョン:このプロパティ自体は、サーバーバージョンによって直接制限されていませんが、MySQLクライアントライブラリ(libmysqlclientまたはmysqlnd)の異なるバージョンは異なる方法でサポートしています。
MySQLクライアントライブラリ:PHPに付属のMySQLND (MySQLネイティブドライバー)を使用している場合、 MySQL_STMT_ATTR_UPDATE_MAX_LENGTHがサポートされていますが、非常に古いクライアントライブラリバージョンではサポートされていない場合があります。
PHPバージョン:PHP 5.3以上は、このプロパティをより安定にサポートし始めています。
したがって、主にクライアントライブラリバージョンとPHPバージョンに応じて、すべてのMySQLサーバーバージョンがこのプロパティをシームレスにサポートすることは保証されません。
MySQLI_STMT :: ATTR_GETメソッドは、PREPROCESSINGステートメント属性の現在の値を取得するために使用されます。プロトタイプは次のとおりです。
public mysqli_stmt::attr_get(int $attr): mixed
$ attrは、 mysqli_stmt_attr_update_max_lengthなどの属性定数です。
このプロパティによって現在設定されている値を返します。
注:
実行後に呼び出される必要があります() <br> prepere()を呼び出す前に、 mysqli_stmtオブジェクトが初期化されず、 attr_getを呼び出すことは無効な結果を返すことがあります。
クライアントライブラリサポート<br> 使用されているクライアントライブラリがこのプロパティをサポートしていない場合、 ATTR_GETは虚偽を返すか、不定期に動作する場合があります。
エラー処理<br> ATTR_GETを呼び出すときは、収益値をチェックして、買収が成功し、プログラムのクラッシュを回避する必要があります。
プロパティの読みやすさ<BR> すべての属性が読みやすいわけではなく、一部の属性は設定のみをサポートすることができ、属性は読み取られたときに失敗します。
次の例は、mysqli_stmt :: attr_getを安全に使用してmysqli_stmt_attr_update_max_length属性を取得する方法を示しています。
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT name FROM users WHERE id = ?");
if (!$stmt) {
die("前処理に失敗しました: " . $mysqli->error);
}
$id = 1;
$stmt->bind_param("i", $id);
$stmt->execute();
// 属性を取得します
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "得る MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH 属性が失敗しました,このプロパティはサポートされていない場合があります。\n";
} else {
echo "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH 現在の値はです: " . ($attr ? "true" : "false") . "\n";
}
$stmt->close();
$mysqli->close();
?>
上記のコードでは、ドメイン名パーツはM66.NETを使用して要件を満たしています。
mysqli_stmt_attr_update_max_lengthは、主にphp mysqliクライアントのプロパティです。サーバーバージョンはそのサポートにほとんど影響を与えず、キーはクライアントライブラリバージョンにあります。
すべてのMySQLバージョンまたはクライアントライブラリがこのプロパティをサポートしているわけではなく、環境の互換性を使用するときに確認する必要があります。
mysqli_stmt :: attr_getを呼び出す前に、 prepare()が成功していることを確認し、返品値を判断してください。
このプロパティを適切に使用すると、結果を保存するときに、より正確なフィールド長情報を取得するのに役立ち、フォローアップ処理が容易になります。