2013-05-04 85 views
-1

首先,我是一個新手web開發人員。PHP 5.4可以在PHP 5.3上運行配置服務器

我的問題是「使用PHP 5.4開發的網站可以在PHP 5.3配置的服務器上運行?」

(詳細說明) 我自己配置​​的Apache 2.4中,MySQL 5.6和Windows PHP 5.4.12。一切都好。但是當我將我的網站文件夾更改爲另一臺配置了WAMPserver的機器時,會發生錯誤。這個WAMPserver配置了Apache 2.2.11,PHP 5.3和MySQL 5.1.36。

我在這臺機器上安裝MySQL 5.6並且數據庫連接成功。但「分析錯誤發生的代碼」,如

$country = mysql_fetch_row(queryMySQL("----"))[0];

此外,它表現出其他錯誤,如「表‘emp.productcateogry’不存在」。

請給我一些建議。

+1

PHP 5.3.x不支持在函數調用時訪問數組返回 - 因此是錯誤。 – Jon 2013-05-04 07:56:56

+0

我所知道的是,將舊版本與新版本結合起來,並期望它的工作是粗略的。 – SchautDollar 2013-05-04 07:57:06

+0

**不再支持** mysql_ *'函數,它們是[**官方不推薦使用的**](https://wiki.php.net/rfc/mysql_deprecation),**不再維護**並且將來會[**刪除**](http://php.net/manual/en/function.mysql-connect.php#warning)。您應該使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/msqli)更新您的代碼,以確保您的項目未來的功能。 – Arjan 2013-05-04 08:21:26

回答

1

簡短的回答是:不,你不應該指望它,尤其是在使用PHP 5.4的new features你的代碼中。

你指的是與特定錯誤:

分析錯誤發生的代碼

是因爲該行

$country = mysql_fetch_row(queryMySQL("----"))[0]; 

是使用新的功能:

有趣ction數組語法

這之前,PHP 5.4,不得不用一個臨時變量,以訪問返回的具體指標,即:

$country_temp = mysql_fetch_row(queryMySQL("----")); 
$country = $country_temp[0]; 

現在是,你是一個新手開發人員,你應該注意一些事情。第一個也是最重要的一點就是mysql_功能deprecated給予注:

這個擴展不贊成PHP 5.5.0的,並會在將來被移除。相反,應該使用MySQLi或PDO_MySQL擴展。

換句話說,使用PDO如果想要使用準備的語句,或MySQLi如果不是。在示例代碼中使用PDO並只獲取一列的另一個優點是,一旦連接,就可以使用函數PDOStatement::fetchColumn()來獲取您現在正在嘗試執行的唯一一列。

無論如何,我希望這個解釋能夠幫助你理解爲什麼你不能回到PHP 5.3.x,如果使用特定的PHP 5.4功能 - 以及一些關於如何改進數據庫連接和可用的功能,可以幫助你在不使用隨PHP 5.4提供的「數組取消引用」的情況下獲得所需的結果。^^

+1

在這種情況下,臨時變量不是必需的。可以使用'list($ country)= mysql_fetch_row(...)'。 – cleong 2013-05-04 11:35:53

+0

儘管如此,向不熟悉該語言的程序員介紹['list'](http://us2.php.net/manual/en/function.list.php)可能會導致混淆運行。使用臨時變量顯示了OP熟悉的直接分配方式。 ^^ – Jon 2013-05-04 11:41:42