PHP函数返回True时,它应该返回错误
我遇到了PHP函数的一个非常小的所见即所得类应用程序的问题。以下函数确定用户是否拥有页面。它具有用于调试的打印语句。PHP函数返回True时,它应该返回错误
function is_owned($sitename, $page_id)
{
$output = false;
$result = count(single_row_query(sprintf("SELECT page_id FROM pages WHERE sitename='%s' AND page_id='%s';", addslashes($sitename), addslashes(strval($page_id)))));
print $result;
if ($result != 0)
{$output = true; }
return $output;
}
以下是我用来调试该函数的页面的输出。
SELECT sitename FROM session WHERE uid='l8rc8ssri8qr65lqvtfp174s91'
SELECT page_id FROM pages WHERE sitename='Test' AND page_id='132432';
Result: 0
The function has returned true.
正如您所看到的,$ result的值为0,但该函数仍然返回true。 SQL语句包含在内,尽管问题似乎并不存在。
以下函数被称为is_owned(),但不可能是相关的,因为它似乎是功能性的。
function single_row_query($query)
{
$database_connection = open_connection();
$result = mysql_query($query);
$output = mysql_fetch_array($result);
$output = $output[0];
mysql_free_result($result);
mysql_close($database_connection);
return $output;
}
非常感谢您的协助。
编辑:此外,这是测试页的输出时,它应该返回true:
! SELECT sitename FROM session WHERE uid='l8rc8ssri8qr65lqvtfp174s91' !
! SELECT page_id FROM pages WHERE sitename='Test' AND page_id='7'; !
Result: 1
The function has returned true.
试试这个条件[增订]
if(!empty($result))
{$output = true; }
该函数无权访问SQL结果,该结果由其他函数处理。 $ result变量是SQL结果的第一行(也是唯一)。 – Etsi 2012-03-02 07:18:01
我有更新条件(试试这个) – 2012-03-02 07:30:27
- 使
var_dump($result)
代替print $result
导致var_dump打印变量类型(打印将变量转换为字符串),因此您将看到真正的值。 - 使用
if ($result !== 0)
进行强类型比较。
你的问题是一个错字的结果,但这就是为什么其他答案是完全错误的。
PHP count
总是返回一个int。具体来说:
返回var中元素的个数。如果var不是一个数组或实现了Countable接口的对象,则返回1。有一个例外,如果var为NULL,则返回0。
无论在single_row_query
函数中发生了什么,count
都会返回一个int。此时,$result != 0
和$result !== 0
或其他假定的问题之间没有实际区别。强类型比较并不重要,因为您必须将int值与int值进行比较。
在这一点上,你的功能是健全的,你的问题必须在别的地方。
您是否可以包含打印'函数已返回true'的代码?也许这就是问题所在。 – 2012-03-02 07:14:05
哦,derp。你完全正确,我忘了把一个$放在一个变量上。对不起,这个小问题。 – Etsi 2012-03-02 07:20:29