2015-09-13 157 views
0

如您所知,MySQL已過時,我開始遷移到MySQLi,因爲沒有人知道何時會從php中刪除mysql函數。將網站從MySQL遷移到MySQLi

我幾乎已經完成了,但是我從Internet上覆制的一個腳本中存在問題。

的問題是,功能openDB()創建與數據庫的連接:

$datba1 = @mysqli_connect($dserver, $duser, $dpass) or die('Error'); 

功能_getRecords同一類$datba1丟失。我已經加入global $datba1;但它沒有幫助,查詢產生錯誤:mysqli_query() expects at least 2 parameters, 1 given.....

我有2個文件:

sc_select_ajax_handle.php

include_once 'config.inc.php'; 
include("sc_classes.php"); 

sc_ajax_select_boxes::openDB(C_HOST, C_USER, C_PASS); 

    if(isset($_REQUEST['class'])) 
     $class = $_REQUEST['class']; 
    else 
     $class =''; 

    if($class == 'updater') { 
     $link_field_value = $_REQUEST['linkval']; 
     $table = $_REQUEST['table']; 
     $keyfld = $_REQUEST['keyfld']; 
     $keyval = $_REQUEST['keyval']; 
     $flds = $_REQUEST['flds']; 
     $xml_encoding = $_REQUEST['xml_encoding']; 

     $sc_ajax_updater = new sc_ajax_updater(); 

     $rows = $sc_ajax_updater->ajax_get_records($table, $keyfld, $keyval, $flds); 
     if(count($rows)!=0 || $link_field_value=='0') 
      $sc_ajax_updater->ajax_output_xml($rows, $xml_encoding); 
     else 
      $sc_ajax_updater->ajax_output_xml_for_none($xml_encoding); 
    }  
    else { 
     $link_field_value = $_REQUEST['linkval']; 
     $table = $_REQUEST['table']; 
     $key = $_REQUEST['key']; 
     $text = $_REQUEST['text']; 
     $order = $_REQUEST['order']; 
     $extra_where = stripslashes($_REQUEST['extra_where']); 
     $select_prompt_text = $_REQUEST['select_prompt_text']; 
     $linkfld = $_REQUEST['linkfld']; 
     $xml_encoding = $_REQUEST['xml_encoding']; 
     $sc_ajax_select_boxes = new sc_ajax_select_boxes(); 

     $rows = $sc_ajax_select_boxes->ajax_get_records($table, $key, $text, $order, 
               $linkfld, $link_field_value, 
               $extra_where); 
     if(count($rows)!=0 || $link_field_value=='0') 
      $sc_ajax_select_boxes->ajax_output_xml($rows, $select_prompt_text, $xml_encoding); 
     else 
      $sc_ajax_select_boxes->ajax_output_xml_for_none($xml_encoding); 

    } 

sc_classes.php (文件sc_classes是非常大的,所以我只在這裏發佈它的一部分)

class sc_ajax_select_boxes { 
     var $php_ajax_handler = '/sc_select_ajax_handler.php'; 

     var $select_prompt_key = 0; 
     var $select_prompt_text = 'Please Select'; 
     var $select_add_prompt_row = TRUE; 
     var $select_wait_text = '...'; 
     var $select_empty_text = '(-)'; 
     var $select_not_found_text = '(Not found)'; 

     var $select_boxes = array(); 
     var $select_box_links = array(); 

     var $xml_encoding = 'ISO-8859-1'; 

     var $group_pre_group = ''; 
     var $group_post_group = ''; 
     var $group_pre_input = ''; 
     var $group_post_input = '<br />'; 

     var $group_wrap_every = 0; // 0 for no wrap 
     var $group_pre_wrap = ''; 
     var $group_post_wrap = '<br />'; 

     /* 
      DB helper functions 
     */ 
     function _getRecords($query) { 
     global $datba1; 
     if(!isset($datba1)) { 
     mail('[email protected]', 'no conenction', "no connection to the database"); 
     } 
      $rows = array(); 
      $result = mysqli_query($datba1,$query); 
      if($result != false) { 
       if(mysqli_num_rows($result)!=0) { 

        while ($line = mysqli_fetch_array($result, MYSQL_NUM)) { 
         $rows[] = $line; 
        } 
       } 
      } 


      return($rows); 
     } // end function _getRecords --------------------------------------- 

     function _getRecordsAssoc($query) { 
     global $datba1; 


      $rows = array(); 
      $result = mysqli_query($datba1,$query); 
      if($result != false) { 
       if(mysqli_num_rows($result)!=0) { 
        while ($line = mysqli_fetch_assoc($result)) { 
         $rows[] = $line; 
        } 
       } 
      } 
      return($rows); 
     } // end function _getRecords --------------------------------------- 

     function openDB($dserver, $duser, $dpass) { 

     $resp=0; 

      $datba1 = @mysqli_connect($dserver, $duser, $dpass) or die('Error'); 

      if (!$datba1) { 
      $resp=-1; 
      } else { 
      $resp=0; 
      } 

      if($resp!=0) { 
       if(isset($datba1)) 
        unset($datba1); 
      } 

      return($resp); 
     } // end function openDB ---------------------------------- 

     function get_list_from_db($table, $key_fld, $text_fld, $order_fld='', 
            $link_field="", $link_field_value="", 
            $extra_where="") { 
      $b_where_word_added=FALSE;       
      $cmd = "SELECT $key_fld, $text_fld FROM $table "; 
      if((!empty($link_field)) && (!empty($link_field_value))) { 
       $b_where_word_added = TRUE; 
       $cmd .= " WHERE $link_field= "; 
       if(is_string($link_field_value)) 
        $cmd .="'$link_field_value' "; 
       else 
        $cmd .="$link_field_value "; 
      } 
      if(!empty($extra_where)) { 
       if($b_where_word_added) 
        $cmd .= " AND "; 
       else 
        $cmd .= " WHERE "; 
       $cmd .= " $extra_where "; 
      } 
      if($order_fld!='') 
       $cmd .= " ORDER BY $order_fld"; 

      $rows = $this->_getRecords($cmd); 
      $list = array(); 
      if(count($rows)!=0) { 
       foreach($rows as $row) { 
        $list[$row[0]] = $row[1]; 
       } 
      } 

      return($list); 
     } // end function get_list_from_db 
+0

如果你從一個到另一個你爲什麼從一匹馬去一個馬車遷移到汽車?直接跳到車上。無論如何你都在遷徙。不妨遷移到最新的'pdo_mysql'。 [$ this-> datba1 = @mysqli_connect($ dserver,$ duser,$ dpass)或者死掉[$ this-> datba1 = @mysqli_connect](http://php.net/manual/en/ref.pdo-mysql.php) – Kuya

回答

0

$datba1只存在於方法openDB的範圍內。其他方法知道沒有關於這個變量的。如果您希望其他類的方法來了解$datba1的存在,你應該讓類的一部分,使用this

class sc_ajax_select_boxes { 

    var $datba1 = null; 

    // .... 

    function openDB($dserver, $duser, $dpass) { 
     $this->datba1 = @mysqli_connect($dserver, $duser, $dpass) or die('Error'); 

     // I don't know why you check all this because in case of error your script wiil die with message `Error` 
     /*if (!$datba1) { 
     $resp=-1; 
     } else { 
     $resp=0; 
     } 

     if($resp!=0) { 
      if(isset($datba1)) 
       unset($datba1); 
     } 

     return($resp);*/ 
    } // end function openDB ---------------------------------- 

    function _getRecordsAssoc($query) { 
     // ... 
     $result = mysqli_query($this->datba1,$query); 
     // ... 
    } 
+0

('Error');'我得到這個錯誤:PHP消息:PHP致命錯誤:當不在對象上下文中時使用$ this, – Gigante

+0

然後或者不要將'openDB'方法調用爲static,或者將'datba'定義爲static變量。 –

+0

對我有意義 – Drew