【问题标题】:Passing PHP MySQL Result Object to Function将 PHP MySQL 结果对象传递给函数
【发布时间】:2012-12-04 22:22:26
【问题描述】:

我正在尝试获取 MySQL 结果行并将其传递给函数进行处理,但该行没有通过。我假设这是因为实际行作为对象返回并且对象无法传递给函数?

E.G

function ProcessResult($TestID,$Row){
    global $ResultArray;
    $ResultArray["Sub" . $TestID] = $Row["Foo"] - $Row["Bar"];
    $ResultArray["Add" . $TestID] = $Row["Foo"] + $Row["Bar"];
}



$SQL = "SELECT TestID,Foo,Bar FROM TestResults WHERE TestDate !='0000-00-00 00:00:00'";
$Result= mysql_query($SQL$con);

    if(!$Result){
        // SQL Failed
        echo "Couldn't find how many tests to get";
    }else{

        $nRows = mysql_num_rows($Result);

        for ($i=0;$i<$nRows;$i++)
        {
            $Row = mysql_fetch_assoc($Result);

            $TestID = $Row[TestID];

            ProcessResult($TestID,$Row);
        }

    }

我需要的是填充了来自 MySQL 查询的大量数据的 $ResultArray。这不是我的实际应用程序(我知道对于显示的内容没有必要这样做),但将结果传递给函数的原理是相同的。

这真的可以做一些吗?

【问题讨论】:

  • 不推荐使用 MySQL 扩展来编写新代码。相反,应该使用mysqliPDO_MySQL 扩展名。在选择 MySQL API 时,另请参阅 MySQL API Overview 以获得更多帮助。
  • @DC_ 是对的。反正行不通过是什么意思?
  • ...and objects can't get passed to function? 对象肯定可以传递给函数。顺便说一句,它们是通过引用传递的,但它们仍然被传递。
  • 您能否将两个var_dump(例如var_dump($Row);)的结果相加,一个在ProcessResult 之前,另一个在函数ProcessResult 内?
  • mysql_query($SQL$con); 应该是mysql_query($SQL,$con); 首先是语法错误。不确定这是否会影响您的程序,或者只是这里的错字

标签: php mysql function object


【解决方案1】:

mysql_query($SQL$con); 应该是mysql_query($SQL,$con); 首先是语法错误。不确定这是否会影响您的程序,或者这只是这里的一个错字。

我建议在数组键周围加上引号。 $row[TestID] 应该是 $row["TestID"]

其余的看起来应该可以工作,尽管这里有一些奇怪的想法。

您也可以这样做以使您的代码更简洁。

if(!$Result){
    // SQL Failed
    echo "Couldn't find how many tests to get";
}else{

    while($Row = mysql_fetch_assoc($Result))
    {
        $TestID = $Row['TestID'];

        ProcessResult($TestID,$Row);
    }

}

【讨论】:

  • 谢谢大家,实际上我所做的并没有什么问题 - 这是我的 SQL 查询一开始就没有获取正确的东西!不知道这是否可能导致我首先质疑它,而不是看明显的事情。希望如果其他人质疑是否可以这样做,他们会发现这很有用。
【解决方案2】:

mysql_fetch_assoc() 返回一个关联数组 - see more

如果你需要一个对象,试试mysql_fetch_object()函数 - see more

数组和对象都可以传递给函数。因此,您的代码似乎是正确的,除了一行。应该是:

$Result= mysql_query($SQL, $con);

或者只是:

$Result= mysql_query($SQL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多