簡體   English   中英

使用PHP mysqli行時的奇怪行為

[英]Weird behaviour when using PHP mysqli row

我目前正在將PHP腳本從5.4版的PHP服務器轉換為5.3版的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] => Mr [4] => Rasmus [5] => 4 [6] => [7] => 0)

因此,該陣列正在運行。

但是以下聲明無效。

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

因此,我嘗試將整個行存儲在單個數組對象中,然后分別調用所有子成員。

像這樣:

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

而且效果很好。

怎么會? 該聲明有什么問題:

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

PHP 5.4中引入了直接從調用方法中引用返回數組元素的功能,這就是為什么它在5.3中不起作用的原因。

來自http://php.net/manual/en/language.types.array.php上的示例#7

從PHP 5.4開始,可以直接對函數或方法調用的結果進行數組取消引用。 在此之前,只能使用一個臨時變量。

因此,您的臨時解決方案似乎將成為一個長期解決方案:)

您說過要將腳本從PHP 5.4轉換為PHP 5.3。 顯然您忘記了那條線,因為

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

是無效的PHP 5.3。 您應該得到一個錯誤閱讀:

解析錯誤:語法錯誤,意外的[[,期望為','或';' 在...

筆記

如您在PHP.net的發行說明中所見

functionname()[1]是PHP 5.4中添加的內容。

在PHP 5.3和更高版本中不可能直接取消引用函數調用的結果,但是從PHP 5.4開始,這是可能的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM