2011-11-01 104 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