mysql php
情景描述:
查詢兩台伺服器上的資料庫,提取使用者資料。
① 將資料列表顯示,已成功
getAddrPerson($_SESSION['uid']);//個人//個人通訊錄$dataPers = (empty($addrPersons['addrperson']))?array():json_decode(base64_decode($addrPersons['addrperson']),true);//$addrPersons array();#擷取公司通訊錄$stafflists = $mysql->getDomainUserList($domain);$stafflists_ = $mysql_->getDomainUserList($domain);debug(count($stafflists)); //29debug(count($stafflists_)); //57
② 提供搜尋,在單獨的搜尋網頁再次提取兩台伺服器上的使用者資料,並根據關鍵詞進行過濾。
此時PHP終止,Fatal error: Call to undefined function mysql_query()
getAddrPerson($_SESSION['uid']);//個人$dataPers = (empty($addrPersons['addrperson']))?array():json_decode(base64_decode($addrPersons['addrperson']),true);//$addrPersons null#擷取公司通訊錄$stafflists = $mysql->getDomainUserList($domain);//$stafflists_ = $othersql->getDomainUserList($domain);debug($stafflists);exit;//debug($stafflists_);
可能是哪一步出錯?
回複討論(解決方案)
在你貼出的代碼中,沒有看到 mysql_query
你只能根據錯誤資訊指示的行號排查錯誤
php代碼中資料庫的密碼要和電腦裡的資料庫中的密碼一樣
require_once (dirname(__FILE__) . "/../classes/mode/mysql_mode_class.php");require_once (dirname(__FILE__) . "/../classes/mode/mysql_list_class.php");//這兩行也有在header.php中包含//這兩個類中的執行函數是一樣的 class MySqlList {//sql paramspublic $server;public $username;public $password;public $database;public $code;function MySqlList(){global $webpost;//include("xmlparse.inc");$sqlist = parse_xml_config($webpost['path']['sqlist'],"sqlist");if(!empty($sqlist) && is_array($sqlist)){foreach($sqlist['list'] as $list){if(strcmp($list['server'],$_SERVER['SERVER_ADDR'])){$config = $list;}}//end for}//end ifif(empty($config))die("讀取MySql配置出錯。");$this->server = $config['server'];$this->username = $config['username'];$this->password = $config['password'];$this->database = $config['database'];} //connect sql function connect(){$connect = mysql_connect($this->server, $this->username, $this->password);if (!$connect){die("伺服器串連失敗:".mysql_error());}$conn = mysql_select_db($this->database,$connect) or die("資料庫連接失敗!
");mysql_query("set names utf8");return $connect;}//execute sqlfunction querySql($sql,$array=2,$fail=false,$succe=false,$suc_href=false,$type=MYSQL_ASSOC){ global $webpost;$result = mysql_query($sql,$this->connect()); //提示在這裡終止if(!$result) die("SQL: {$sql}
Error: " . mysql_error() );if (mysql_affected_rows() >0){//write_sys_log("success SQL:".$sql);switch($array){case 1:$arry = array();while($arr = @mysql_fetch_array($result,$type)){array_push($arry,$arr);}return $arry;case 2:$arr = @mysql_fetch_array($result,$type);return $arr;default:return 1;}}elseif(mysql_affected_rows() == 0 && !mysql_errno()){//write_sys_log("empty SQL:".$sql);return false;}elseif(mysql_errno()){//write_sys_log("failed SQL:".$sql);return 0;}mysql_close();}#擷取另一台資料庫的使用者資料 function getDomainUserList($domain){ $sql = "SELECT m.id,m.did,m.code,username,realname,domain FROM table_a m "."JOIN table_b d ON m.did=d.id WHERE domain='{$domain}'";return $this->querySql($sql,1); } }
思路上大概哪裡有問題?
除 mysql_query 外,其他 mysql 族函數均沒有報錯
只能說 mysql 擴充安裝(編譯)錯誤
但是,我在提取使用者資料後,是可以列表顯示的。
只是在單獨的搜尋網頁卻出現這個問題。
你提供的資訊太少
不排除個別應用中單詞拼字錯誤
終於排查出來了,是因為單獨的搜尋網頁沒有擷取到$_SESSION。
但是我加session_start()了,而且是由前面的列表頁,通過$.ajax擷取搜尋網頁的內容。
為什麼搜尋網頁的$_SESSION是空的?
在 $_SESSION 為空白的程式中檢查 get_included_files 返回的檔案清單
通常 session_start() 宜放在全域的公用檔案中
況且 php 5.4 還會檢查該函數是否被執行過,如執行過將會產生警告資訊
問題解決了。
原因:在搜尋網頁的包含頁中,header()和session_start()的位置搞錯了。把包含頁中的header注掉就好了。