2011-04-18 54 views
1

在任何人跳过我之前,我发现了一个类似的问题here,但不幸的是他们的答案似乎并不适用于我的问题。PHP mysql_query,整数返回而不是资源

我创建了一个名为sqlReturn()的函数,以便在查询出错时更容易产生错误(使用标准输出)。代码如下:

function sqlResult($query) 
{ 
    return mysql_query($query) 
    or die("SQL Query: " . $query . "<br />SQL Error: " . mysql_error()); 
} 

正如你所看到的,它只是在我喜欢的方式输出错误,它为我节省了一点努力在沿途编码。然而,虽然这已经在大多数情况下工作(例如当我使用SELECT或INSERT的情况下),它抛出以下错误:

PHP Warning: mysql_fetch_array() expects parameter 1 to be resource, 
       boolean given in /var/www/login/login_submit.php on line 42 

它返回1,而不是资源。如果不是调用该函数(它位于一个单独的php文件中),而是简单地在同一个文件中使用该行代码而不返回语句
(即$sqlResult = mysql_query($sqlQuery) or ...等),它将像平常一样返回资源。

在情况下,它是相关的,我的SQL查询也低于:

$sqlQuery = 
    "SELECT userID, username, password, access_level 
    FROM users 
    WHERE username = '{$username}' 
    AND (password = '{$password_sha1}' OR password = '{$password_sha256}')"; 

任何投入在这,将不胜感激。

感谢,

模范

+0

请开机自检代码'mysql_fetch_array()'... – Frankie 2011-04-18 20:55:08

+0

@frankie:这是一个标准的PHP函数... – 2011-04-18 20:56:36

+0

@Marc B I怀疑的Paragon是喂养的功能用一个“布尔” :) – Frankie 2011-04-18 20:59:47

回答

5

偷偷摸摸怀疑有约束力的规则在这里踢。 PHP可能会看到你的功能为

return (mysql_query(...)) or die(...); 

并且在看到die()之前返回。尝试像这样重写

function sqlQuery(...) { 
    $result = mysql_query(...); 
    if ($result === FALSE) { 
     die(mysql_error(...)); 
    } 
    return $result; 
} 

因此没有任何错误解析的机会。

+0

嘿,我对你的回答很怀疑,因为我的查询很好(即我不需要'死亡')。但它的作品! 您能否请您向我解释究竟发生了什么,或者将我链接到可以这样做的资源?谢谢! – Paragon 2011-04-18 21:08:03

+3

'return'的优先级高于'或'。所以查询调用会返回并返回,并且它的结果被返回吸引,这会将执行转移回原来的任何函数调用,而不会到达'或'子句。这有点像派你的狗去拿你的拖鞋和烟斗,但拿到拖鞋后拍摄它。命令得到管道仍然存在,但不可能发生,因为狗死了。 – 2011-04-18 21:10:14

+0

@Marc_B大声笑是你射击的薛定谔狗?因为比它还有机会, – Johan 2011-04-18 22:47:38