有没有办法用 mysql_query 设置默认数据库句柄?
Posted
技术标签:
【中文标题】有没有办法用 mysql_query 设置默认数据库句柄?【英文标题】:Is there a way to set the default database handle with mysql_query? 【发布时间】:2010-07-27 18:47:18 【问题描述】:有没有办法用 mysql_query 设置默认的数据库句柄?所以我知道 mysql_query 可以在没有 sql 句柄的情况下调用,但它基本上会使用你从 last mysql_connect 获得的任何句柄。如果我想自己设置默认句柄怎么办?
我只是想明确一点,我们编写的所有代码都没有传入处理程序。我们无法更改这些。我们在幕后有一些代码可以在不同的数据库集群之间更改数据库。我们希望能够在不重复调用 mysql_connect 的情况下在数据库之间切换。
【问题讨论】:
厌倦了每次都将参数传递给函数?尝试使用using an object-oriented 数据库接口,并免费获得prepared statements!立即购买! (另外,PDO。不过,请认真考虑使用更现代的数据库界面。) 不久前我在 asp wid mySQl 中也遇到过类似的问题。我也问了一个问题,可惜没有回复。你的问题给了某种尤里卡来解决我的问题......谢谢。 【参考方案1】:超级贫民区版本。
$defaultHandle;
function SetDefaultHandle($handle)
global $defaultHandle;
$defaultHandle = $handle;
function q($query)
global $defaultHandle;
return mysql_query($query,$defaultHandle);
【讨论】:
+1 实际提供了一个可用的解决方案,并为它的 hack 大声疾呼。 你能覆盖mysql_query函数吗?否则这是行不通的。 为什么不呢?当然,您必须将现有代码库中对mysql_query
的所有调用替换为对q
的调用。但无论如何你都必须这样做。 没有办法让mysql_query
做你想做的事,只有变通方法和技巧。这是一种解决方法,而且是一种骇人听闻的方法。但是,它会起作用的。【参考方案2】:
试试这个:
$dbc = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query($query, $dbc);
来自manual:
resource mysql_query ( string $query [, resource
$link_identifier ]
)
link_identifier
- MySQL 连接。如果未指定链接标识符,则假定由 mysql_connect() 打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像 mysql_connect() 没有参数被调用一样。如果没有找到或建立连接,则会生成 E_WARNING 级别的错误。
【讨论】:
【参考方案3】:而不是根据您的问题将您指向手册,您现在肯定已经阅读了...
您不能使用 mysql
扩展来执行此操作。
神奇的“选择最后打开的句柄”行为是由扩展本身定义的。您无法改变这种行为。
您要求的行为将需要自定义代码,几乎可以肯定的是,使用适当的包装器替换对每个函数的每个调用,该包装器为您的负载平衡情况选择正确的数据库句柄。
【讨论】:
【参考方案4】:如果你想提供连接,你可以在函数调用中将它作为第二个参数传递。详情请见documentation of mysql_query
。
【讨论】:
我们不能编写我们的代码,使得所有查询都在不传递句柄的情况下完成。然后我们在我们的数据库农场之间切换幕后的数据库 不连接怎么生成链接标识符?以上是关于有没有办法用 mysql_query 设置默认数据库句柄?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法为 sfWidgetFormFilterDate 小部件设置默认值?
Extjs Grid Grouping - 设置默认标题/值
MySQL 批量写入数据报错:mysql_query:Lost connection to MySQL server during query