2014-11-25 83 views
0

我一直在檢查這個錯誤,沒有特定於我的代碼的解決方案。我已使用mysqli_connect()調用連接到mysql服務器。然後通過連接的結果的$_SESSION有它可用在整個網站 - 正如我在所有其他項目通常做,但出於某種原因,我不斷收到錯誤:mysqli_query():無法獲取mysqli

"mysqli_query(): Couldn't fetch mysqli" 

有生成的代碼錯誤:

if(!isset($_GET['sortBy'])) 
    { 
     $listSQL = "SELECT * FROM '".$_SESSION['WorkTable']."'"; 
    } 
    else 
    { 
     $listSQL = "SELECT * FROM '".$_SESSION['WorkTable']."' where ".$_GET['sortBy']."='".$_GET['sortBy']."'"; 
    } 

    //get Contacts From DB 
    if(!empty(mysqli_query(@$_SESSION['IMWEDBcxn'],$listSQL))) 

這裏是連接類代碼...

if(!empty($cxn)) 
{ 
    $_SESSION['WorkTable'] = $dbTable; 

    $_SESSION['IMWEDBcxn'] = $cxn; 
} 

任何事情,我在這裏失蹤?

+0

爲什麼在$ _SESSION ['IMWEDBcxn']之前有char @?我知道它用於避免函數中的警告,但這就像一個變量用於連接mysqli的鏈接 – Serpes 2014-11-25 12:40:59

+0

你不能在會話中存儲連接處理程序,[它不能被序列化](http://php.net/manual /en/intro.session.php) – 2014-11-25 12:42:15

+0

@Series忽略'@'...正在嘗試一些故障排除 – 2014-11-25 12:43:21

回答

2

如前所述伊萬Solntsev,不存儲在用戶的會話連接處理程序爲2個顯而易見的原因:

1-處理程序不能被序列化。您在用戶會話中存儲的任何內容(使用$_SESSION)只能在該用戶的範圍內使用。我建議你閱讀關於會話和PHP的更多信息,$_SESSION不是通過會話存儲數據的一種方式。

所以做這樣的事情:

$connect = mysqli_connect("..."); 
$_SESSION["dbconnection"] = $connect; 

mysqli_query($_SESSION["dbconnection"], $query); 

是錯誤的!

如果你想要一個持久連接,爲了避免重新連接每個數據庫查詢,請閱讀關於MySQLi和持久連接:http://php.net/manual/en/mysqli.persistconns.php。如果你正在5.3以下的PHP版本上運行,我建議使用PDO(無論你使用的是哪個PHP版本,我都會推薦)。

相關問題