5

我有一个类适用于 php 5.3(XAMPP 1.7.3,windows 7)但在我的服务器中不起作用(php 5.2.17 - 安全模式开启):

 <?php

    class MYSQL_DB {

        var $connection;

        function MYSQL_DB() {
            $this->connection = mysql_connect(S, U, P) or die('Can\'t connect to MySQL server.');
            mysql_select_db(DB, $this->connection) or die(mysql_error());
        }

        function getJobs($wid) {
            $q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC";
            $result = mysql_query($q, $this->connection);
            $ret = $this->mysql_fetch_all($result);
            mysql_free_result($result);
            return $ret;
        }

        function mysql_fetch_all($result) {
            $all = array();
            if ($result) {
                while ($row = mysql_fetch_assoc($result)) {
                    $all[] = $row;
                }
                return $all;
            }
        }

    }
    $db=new MYSQL_DB();

?>

在另一个文件中,我使用了getjobs函数:

<?php
    $tempbJobs=$db->getJobs(1368);
    var_dump($tempbJobs);
?>

当我在函数中使用var_dump right before时,它​​会显示正确的值,但 会打印NULLreturn $ret;getjobsvar_dump($tempbJobs);

PS:我简化了代码,它可以在我的本地主机上运行,​​但不能在生产服务器上运行。
PS:如果我更改return $ret;return 'DUMPED';,返回值将是string(6) "DUMPED"

var_dump($ret ); 输出:

array(2) {
  [0]=>
  array(5) {
    ["id"]=>
    string(5) "10755"
    ["owner"]=>
    string(5) "23626"
    ["field"]=>
    string(1) "6"
    ["type"]=>
    string(1) "2"
    ["expi"]=>
    string(10) "1372144648"
  }
  [1]=>
  array(5) {
    ["id"]=>
    string(5) "10756"
    ["owner"]=>
    string(5) "23626"
    ["field"]=>
    string(1) "5"
    ["type"]=>
    string(1) "2"
    ["expi"]=>
    string(10) "1372144654"
  }
}
4

5 回答 5

1

基于如果 $result 为真,您只从函数 mysql_fetch_all($result) 返回 $all 的事实,我必须假设 mysql_query() 返回假。

致电后

$result = mysql_query($q, $this->connection);

你能加这个吗

$result = mysql_query($q, $this->connection);
if ( ! $result ) {
    echo "ErrorNo: " . mysql_errno() . " Error Message: " . mysql_error();
}

这可能有助于确定问题实际上是什么,因为它必须是某种数据库错误。

于 2013-06-27T12:46:55.957 回答
1

我审查了你所有的评论。在您的一条评论中,您说 return 不起作用,但我认为它工作正常,因为您已经在其中一条评论中说过,当您打印出结果之前return $ret,它会给您正确的结果。

事实: mysql_fetch_all($result)也返回结果。

检查 sql 代码:$q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC"; 我不知道 {$wid} 它是什么。

测试一下

$q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = '$wid' order by ID ASC";
于 2013-07-01T07:54:41.440 回答
1

在函数 getjobs() 中为 $ret 定义数组后尝试

$ret=array(); //try 
于 2013-07-03T11:29:15.330 回答
1

您能否检查一下您的常量S, U, P, TB_PREFIX是否存在defined()并且它们是否具有值。

还要修改您的函数mysql_fetch_all以返回响应:

function mysql_fetch_all($result) {
    $all = array();
    if ($result) {
        while ($row = mysql_fetch_assoc($result)) {
            $all[] = $row;
        }
    }
    return $all;
}
于 2013-07-01T07:33:15.787 回答
0

我知道这是一个有点生疏的问题,但仍然很有趣。你能找到解决方案吗?

如果相同的代码在不同的服务器上不起作用,我会怀疑这种情况下的内存限制。尝试增加 php 内存限制。

检查 phpinfo(); 可能是明智的。在两台服务器上比较差异。

于 2015-04-14T02:00:34.477 回答