2011-11-01 105 views
0

我有一個關於我的mysql連接的問題。我需要訪問類中的連接。我該怎麼做?即使我嘗試在類中包含連接文件或連接變量$ con0,它也沒有值,所以我得到一個錯誤。在類中調用數據庫連接

Connection.php

<?php 
$username = " "; 
$password = ""; 
$hostname = " ";  
$con = mysql_connect() 
?> 

model.php

<?php 

include(connection.php); 
class model{ 

function needTheConnection($uid){ 
$q = "SELECT x from DB.table WHERE id = '" . $uid . "'"; 
$res = mysql_query($q); 
} 

} 
?> 

這給了我 「的mysql_query():提供的參數不是一個有效的MySQL-Link的資源」。

有什麼不對?

感謝, tinks

+1

此代碼不會給你這樣的錯誤。 –

回答

4

你錯過了你的代碼的一部分。我們知道這是基於錯誤消息。這條線:

$res = mysql_query($q); 

也許實際上看起來像這樣在你的代碼:

$res = mysql_query($q, $con); 

我說得對不對?如果是這樣的話,問題是$con不能從該函數或類實例中訪問。解決這個問題的簡單方法就是簡單地將其刪除。 MySQL客戶端將自動使用從腳本創建的最後一個連接。

真的,你應該考慮不同的設計模式。對於它的價值,我經常只是堅持我的數據庫資源在$GLOBALS['db']。這並不被認爲是一種純粹的面向對象的方式,但對於許多應用程序來說,它是合適的。

最後,$ 5表示您對SQL注入非常開放。學習如何使用PDO進行預備查詢,或者至少在有人竊取整個數據庫並將havok帶入您的網站之前逃離您的數據。

+1

'automagically':錯字或天才? – xbonez

+0

嗨!是的,你是對的,我錯過了$ con。我會考慮$ GLOBAL謝謝..你的意思是我應該總是使用mysql_real_escape_string()來保證安全性? – tinks

+0

我還在每個函數中使用了全局$ con ..只是不確定它的良好做法.. – tinks

1
class model { 
    function __construct(&$db) { 
    $this->db=$db; 
    } 
    function needTheConnection($uid){ 
    $q = "SELECT x from DB.table"; 
    $res = mysql_query($q,$this->db); 
    } 
} 

$model = new model($conn); 
+0

嗨,$ res是連接權?不是查詢的結果? – tinks

+0

@ Col.Shrapnel ..它給我這個錯誤呼叫時傳遞引用已被棄用;如果您想通過引用傳遞它,請修改[運行時函數名稱]()的聲明。如果你想啓用呼叫時傳遞引用,你可以在你的INI文件 – tinks

+0

中設置allow_call_time_pass_reference爲true,我的函數名只是getConnection(){},它返回$ con ..我需要修改它嗎/ – tinks