2012-03-02 113 views
1

我遇到了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. 
+2

您是否可以包含打印'函数已返回true'的代码?也许这就是问题所在。 – 2012-03-02 07:14:05

+1

哦,derp。你完全正确,我忘了把一个$放在一个变量上。对不起,这个小问题。 – Etsi 2012-03-02 07:20:29

回答

-1

尝试:

if ($result !== 0) { 
    $output = true; 
} 
+0

当$ result为0时,它仍然返回true。 – Etsi 2012-03-02 07:15:20

-1

试试这个条件[增订]

if(!empty($result)) 
{$output = true; } 
+0

该函数无权访问SQL结果,该结果由其他函数处理。 $ result变量是SQL结果的第一行(也是唯一)。 – Etsi 2012-03-02 07:18:01

+0

我有更新条件(试试这个) – 2012-03-02 07:30:27

-2
  1. 使var_dump($result)代替print $result导致var_dump打印变量类型(打印将变量转换为字符串),因此您将看到真正的值。
  2. 使用if ($result !== 0)进行强类型比较。
2

你的问题是一个错字的结果,但这就是为什么其他答案是完全错误的。

PHP count总是返回一个int。具体来说:

返回var中元素的个数。如果var不是一个数组或实现了Countable接口的对象,则返回1。有一个例外,如果var为NULL,则返回0。

无论在single_row_query函数中发生了什么,count都会返回一个int。此时,$result != 0$result !== 0或其他假定的问题之间没有实际区别。强类型比较并不重要,因为您必须将int值与int值进行比较。

在这一点上,你的功能是健全的,你的问题必须在别的地方。

相关问题