データベース操作にPHPのMySQLI拡張機能を使用する場合、 MySQLI_STMT :: ATTR_GET関数を使用して、PREPROCESSINGステートメント( MySQLI_STMT )の属性値を取得します。この関数は、場合によってはfalseを返す場合があります。これは通常、プロパティが故障していることを示します。この記事では、mysqli_stmt :: attr_getがfalseを返し、対応するソリューションを提供する一般的な理由を詳細に分析します。
mysqli_stmt :: attr_getは、 mysqli_stmt_attr_update_max_lengthなどのパラメーターとして定数定数を渡す必要があります。渡された属性定数が無効または未定義である場合、関数はfalseを返します。
例:
$mysqli = new mysqli('m66.net', 'user', 'pass', 'database');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$attr = $stmt->attr_get(9999); // 違法属性定数
if ($attr === false) {
echo "属性を取得できませんでした,属性定数は違法またはサポートされていません。";
}
提案:渡された属性定数が正しくサポートされていることを確認するために、公式のドキュメントを参照してください。
$ stmtオブジェクトが正常に作成されていないか、 $ stmt-> close()が呼び出されていない場合、 attr_getを呼び出すことも失敗します。
例:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("声明の作成に失敗しました:" . $mysqli->error);
}
$stmt->close();
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "属性を取得できませんでした,プリプロセシングステートメントオブジェクトは使用できません。";
}
提案:Preprocessingステートメントオブジェクトが有効であり、 attr_getを呼び出す前に閉じていないことを確認してください。
一部のPHPバージョンまたはMySQLドライバーバージョンには互換性の問題があり、 ATTR_GETが適切に動作しないため、 FALSEを返します。
提案:
PHPおよびMySQLバージョンが正式に推奨される安定したバージョンであることを確認してください。
PHPとMySQLの最新バージョンにアップグレードしてみてください。
さまざまな環境でテストして、環境問題のトラブルシューティングを行います。
ATTR_GETでは、着信パラメーターが整数属性定数であることが必要です。文字列または他のタイプが渡されると、関数がfalseを返す場合があります。
例:
$attr = $stmt->attr_get("MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH"); // 間違った使用法
if ($attr === false) {
echo "属性を取得できませんでした,パラメータータイプエラー。";
}
推奨事項:パラメーターが事前定義された整数定数であることを確認してください。
まれに、データベース接続の例外またはリソース状態の例外は、関数がfalseを返す可能性があります。
提案:
データベース接続が安定していることを確認してください。
考えられる例外やエラーをキャッチして処理します。
$ mysqli->エラーと$ stmt->エラーを使用して、詳細なエラー情報を取得します。
mysqli_stmt :: attr_getを正しく使用する例は次のとおりです。
$mysqli = new mysqli('m66.net', 'user', 'pass', 'database');
if ($mysqli->connect_error) {
die("接続に失敗しました:" . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("声明の作成に失敗しました:" . $mysqli->error);
}
$id = 1;
$stmt->bind_param("i", $id);
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "属性を取得できませんでした,エラーメッセージ:" . $stmt->error;
} else {
echo "属性値はです:" . $attr;
}
$stmt->close();
$mysqli->close();
関連タグ:
mysqli_stmt