【问题标题】:Is there a way to set the default database handle with mysql_query?有没有办法用 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 中也遇到过类似的问题。我也问了一个问题,可惜没有回复。你的问题给了某种尤里卡来解决我的问题......谢谢。

标签: php 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

      【讨论】:

      • 我们不能编写我们的代码,使得所有查询都在不传递句柄的情况下完成。然后我们在我们的数据库农场之间切换幕后的数据库
      • 不连接怎么生成链接标识符?
      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2011-11-26
      • 2022-01-23
      • 2013-07-04
      相关资源
      最近更新 更多