迁移到MYSQLI:如何在while(list())方法而不是foreach()方法中查询查询结果?

时间:2014-04-04 20:40:34

标签: php mysql mysqli migration

我有非常大的PHP网站,大约3000多个PHP文件,所有文件都链接到名为(lib.inc.php)的主类,其中包括:

config.inc.php
users.inc.php
mysql.inc.php

我正在从MYSQL快速迁移到MYSQLI,我计划在MYSQL部分进行非常小的更改,我确实找到了许多MYSQLI类,我可以用旧的mysql.inc.php替换它,但那不是工作的重要部分......最重要的是我必须在几乎每个PHP文件中更改查询代码,我有大约3到5个MYSQL查询,目前采用以下格式结构:

$query = "
SELECT USER_ID,USER_NAME,USER_EMAIL,USER_LEVEL,USER_REG_DATE,USER_LAST_ACCESS,USER_LAST_IP 
FROM USERS_TBL
LIMIT 0,20
";

$sth = $dbh -> do_query($query);


while (list($USER_ID,USER_NAME,USER_EMAIL,USER_LEVEL,USER_REG_DATE,USER_LAST_ACCESS,USER_LAST_IP) = $dbh -> fetch_array($sth)) {
// Do some thing with the result and print it
}

IN mysql.inc.php:我有以下与上述代码相关的函数:

function do_query($query) {
  $this->sth = mysql_query($query,$this->dbh);
  return $this->sth;
}

function fetch_array($sth) {

  $this->row = mysql_fetch_array($sth);

  return $this->row;
}

我的问题是:

如何将上面的代码从MYSQL迁移到MYSQLI,记住我不想改变循环部分的结构,因为我希望我所有的while循环在所有3000+ PHP文件中保持相同,特别是这部分:

while (list($USER_ID,$USER_NAME,$USER_EMAIL,$USER_LEVEL,$USER_REG_DATE,$USER_LAST_ACCESS,USER_LAST_IP) = $dbh -> fetch_array($sth)) {
// Do some thing with the result and print it
}

在我在网上找到的当前MYSQLI类中,所有处理获取数组的语句都具有以下结构:

/**
 * Retrieve results of a standard query
 */
$query = "SELECT USER_ID,USER_NAME,USER_EMAIL,USER_LEVEL,USER_REG_DATE,USER_LAST_ACCESS,USER_LAST_IP 
    FROM USERS_TBL
    LIMIT 0,20";
$results = $database->get_results( $query );
foreach( $results as $row )
{
$USER_ID = $row['USER_ID'];
$USER_NAME = $row['USER_NAME'];
$USER_EMAIL = $row['USER_EMAIL'];
$USER_LEVEL = $row['USER_LEVEL'];
$USER_REG_DATE = $row['USER_REG_DATE'];
$USER_LAST_ACCESS = $row['USER_LAST_ACCESS'];
$USER_LAST_IP = $row['USER_LAST_IP'];

}

请注意,在mysqli版本中我必须将每个变量分配给另一个变量,因此我可以在代码中的不同位置使用它们,但在我的旧代码中,我只需要在while内部键入变量(list(.. ..))方法..而不是将每个变量放在单独的行中....将while(list())方法更改为foreach()方法将花费我数百小时来在我的整个3000+代码中应用此更改PHP文件600,000行代码。

那么,如何在mysqli版本中应用当前的方法代码???

如果我能得到使用MYSQLI以(list())方式获取结果的示例,我将不胜感激。

0 个答案:

没有答案