閱讀466 返回首頁    go 世紀東方


關於智能建站套餐模板程序SQL語句報錯解決方法

最近有客戶反應網站訪問不了了,經檢查發現是網站程序報SQL語句錯誤,錯誤代碼如下:

1 Database error: Invalid SQL: select * from ew_cp_con_cn where userid=\'1\' and menuid=\'\' order by limit 0,10MySQL Error: 0 (db68441)Session halted.因為這個是老產品上家已經停止售後,所以無法聯係到上家進行處理,隻能我們自己研究。SQL語句報錯,第一時間想到的就是檢查程序代碼,但由於程序核心部分全部加密所以這條路是走不通的,隻能另想其他的辦法。經過一帆研究後發現此錯誤為PHP環境配置導致的,需要將php.ini中的全局變量打開,也就是將“register_globals = Off”修改為“register_globals = On”。這個是因為智能建站模板程序是基於PHP4環境下開發的,在變量參數接收時與現在的PHP5有一些不一樣,這也是PHP版本的一個兼容性問題,以下引用網上資料說明:當register_globals=Off的時候,下一個程序接收的時候應該用$_GET['user_name']和$_GET['user_pass']來接受傳遞過來的值。(注:當<form>;的method屬性為post的時候應該用$_POST['user_name']和$_POST['user_pass'])


當register_globals=On的時候,下一個程序可以直接使用$user_name和$user_pass來接受值。

但如果在生產環境中將“register_globals = Off”修改為“register_globals = On”的話又會對服務器產生安全隱患,所以我們需要想其他辦法來解決這個問題。最後找到一種方法,通過程序來模擬全局變量的控製。首先我們需要找到一個全局的配置文件,如智能建站模板程序中的db.php,然後在裏麵加入如下代碼:

1

<?phpif ( !ini_get(\'register_globals\') ){    extract($_POST);    extract($_GET);    extract($_SERVER);    extract($_FILES);    extract($_ENV);    extract($_COOKIE);    if ( isset($_SESSION) ){        extract($_SESSION);    }}?>;


這種方法經過測試幾乎完全可用,但不排除會出現其他並發問題。


補充:

經過測試,目前發現用此方法會獲取不到session或者cookie的值。會影響使用智能建站套餐多語言模板程序用戶,問題表現:當網站默認語言為中文(英文)時,在訪問網站過程中切換成英文(中文),再訪問其他欄目又會回到以默認語言顯示。為解決此問題,所以現在依然將成都網通90服務器上的php.ini全局變量配置修改為register_globals = On


最後更新:2017-01-10 21:30:50

  上一篇:go 如何清空數據庫
  下一篇:go windows下mysql開啟root遠程訪問