1

現在、バージョン 5.4 の PHP サーバーからバージョン 5.3 の PHP サーバーに PHP スクリプトを変換しています。

ログイン スクリプトの奇妙な動作にすぐに気付きました。

スクリプトを少し分析したところ、問題の原因がわかりました。

$result->fetch_row の最初の行のメンバーへの呼び出しは無効でした。

$result の宣言を以下に示します。

$username = $mysqli->real_escape_string(strtolower($_POST["USERNAME"]));
$password = $mysqli->real_escape_string(md5(strtolower($_POST["PASSWORD"])));

$result = $mysqli->query("SELECT * FROM $table WHERE username='$username' AND password='$password'");

ただし、本能的に、data_seek を適切に呼び出したかどうかを確認しました。私は持っていました。

fetch_row() 関数を出力すると、次の結果が得られました

配列 ( [0] => 3 [1] => 管理者 [2] => d76362b0f640fbcf869033b5e4d1c4bf [3] => 氏 [4] => ラスムス [5] => 4 [6] => [7] => 0 )

したがって、アレイは機能していました。

しかし、次の宣言は機能しませんでした。

$Title = $result->fetch_row()[3];

したがって、行全体を単一の配列オブジェクトに格納してから、すべてのサブメンバーを個別に呼び出そうとしました。

そのようです:

$row = $result->fetch_row();
$Title = $row[3];

そして、それは完璧に機能しました。

どうして?この宣言のどこが間違っていますか:

$Title = $result->fetch_row()[3];

4

4 に答える 4

4

返された配列の要素を呼び出し元のメソッドから直接参照する機能は、PHP 5.4 で導入されました。これが、5.3 で機能しない理由です。

http://php.net/manual/en/language.types.array.phpの例 #7 から

PHP 5.4 以降では、関数またはメソッド呼び出しの結果を直接配列逆参照することが可能です。以前は、一時変数を使用することしかできませんでした。

したがって、一時的な解決策は長期的な解決策になるようです:)

于 2013-01-02T22:10:29.140 に答える
3

あなたはスクリプトを PHP 5.4 から PHP 5.3 に翻訳していると言いました。どうやらその行を忘れたようです

$Title = $result->fetch_row()[3];

有効な PHP 5.3 ではありません。次のエラーが表示されるはずです。

解析エラー: 構文エラー、予期しない '['、',' または ';' が必要です の ...

ノート

于 2013-01-02T22:04:21.853 に答える
0

PHP.netのリリースノートでわかるように

functionname()[1]PHP 5.4 で追加されたものです。

于 2013-01-02T22:05:29.953 に答える
0

PHP 5.3 以降のバージョンでは、関数呼び出しの結果を直接逆参照することはできませんが、PHP 5.4 以降では可能です。

于 2013-01-02T22:09:00.580 に答える