我有一个适用于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
函数return $ret;
之前使用getjobs
时,它会显示正确的值,但var_dump($tempbJobs);
会打印 NULL 。< / p>
P.S:我简化了代码,它可以在我的本地主机上运行,但不能在生产服务器上运行
P.S:如果我将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"
}
}
答案 0 :(得分:1)
基于你只从函数mysql_fetch_all($ result)返回$ all的事实,如果$ result为true,我必须假设mysql_query()返回false。
致电
后$result = mysql_query($q, $this->connection);
你可以添加这个
$result = mysql_query($q, $this->connection);
if ( ! $result ) {
echo "ErrorNo: " . mysql_errno() . " Error Message: " . mysql_error();
}
这可能有助于确定问题究竟是什么,因为它必须是某种类型的数据库错误。
答案 1 :(得分: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;
}
答案 2 :(得分:1)
我查看了您的所有评论。
在你的一条评论中,你说返回不起作用,但我认为它正常工作,因为你已经在一条评论中说过,当你在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";
答案 3 :(得分:1)
在函数getjobs()
中为$ ret定义数组后尝试$ret=array(); //try
答案 4 :(得分:0)
我知道这是一个有点生疏的问题,但仍然很有趣。你能找到解决方案吗?
如果相同的代码在不同的服务器上不起作用,我会怀疑在这种情况下内存限制。尝试增加php内存限制。
检查phpinfo()是明智的。在两台服务器上比较差异。