【问题标题】:Handle mysql_XXXX default link identifier argument gracefully优雅地处理 mysql_XXXX 默认链接标识符参数
【发布时间】:2023-03-18 08:05:01
【问题描述】:

mysql 扩展函数接受可选的链接参数,如果没有指定,它们使用 mysql_connect 调用的最后一个返回值。我希望在更高级别的函数中具有相同的行为,但不知道如何实现它。以下是我绝对不想使用的丑陋示例:

function get_mysql_info($linkid = null){
    $linkid ? $strInfo = mysql_info($linkid) : $strInfo = mysql_info();
    // followed by multiple tortures by ereg calls even!

我看到了两种可能(或可能不)起作用的方法:

  1. 通过一些真正的 void 值(NULL 不合格,函数抱怨)到较低级别并使 mysql 函数认为没有链接参数并使用最后记住的资源
  2. 检索最后记住的资源并显式采用默认方式

这两种变体都没有成功,请指教,谢谢!


请原谅重复,这是伪代码尝试进一步解释我想要什么:

function mysql_wrap ( $optional_link_identifier ) {
  mysql_this( $optional_link_identifier ); // use specified link or default (as described above)
  mysql_that( $mandatory_parameter, $optional_link_identifier ); // use specified link or default 
  // so on
}

...而不是根据可选参数的存在/不存在进行分支:

function mysql_wrap ( $optional_link_identifier = NULL ) {
  if ( $optional_link_identifier ) 
    mysql_this( $optional_link_identifier ); // use specified link 
  else mysql_this(); // or default 
  if ( $optional_link_identifier ) 
    mysql_that( $mandatory_parameter, $optional_link_identifier ); // use specified link 
  else mysql_that(); // or default 
  // so on. as you see, generalizing the code in the function actually made things even worse
}

所以,我正在寻找通用处理这两种情况的方法。

【问题讨论】:

  • 为什么你绝对不想用最自然的方式来表达这一点?你能详细说明一下吗?

标签: php mysql arguments


【解决方案1】:

mysql_* 函数已经过时了。

使用 PDO,您将获得一个完全 OOP 接口,该接口在很大程度上独立于所使用的数据库服务器类型。

【讨论】:

  • “用 X 代替 Y”的答案是没用的。
  • 发布的问题与隐式使用 mysql_connect 创建的句柄特别相关。使用 OO DB 层(例如 PDO)完全消除了这一要求,因为所有调用都特定于一个实例。
  • 是的,使用 TomCat 甚至消除了诉诸 PHP5 的可疑 OOP 的需要。原来的特定问题仍然存在。
  • 为 PDO 删除 mysql_* 函数是一个合理的改变,并且可以相对较少的大惊小怪。从 PHP 更改为 Java 意味着您的整个应用程序需要重写。
猜你喜欢
  • 2016-10-09
  • 2011-08-08
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多