PHP函数返回True时应该返回False

时间:2012-03-02 07:06:10

标签: php

我在为一个非常小的类似WYSIWIG的应用程序中使用PHP函数时遇到了问题。以下函数确定用户是否拥有页面。它有用于调试的print语句。

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.

4 个答案:

答案 0 :(得分:2)

你的问题是拼写错误的结果,但这就是其他答案完全错误的原因。

PHP count 始终返回int 。具体做法是:

  

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

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

此时,您的功能正常,您的问题必须位于其他地方。

答案 1 :(得分:-1)

尝试:

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

答案 2 :(得分:-1)

尝试此条件[已更新]

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

答案 3 :(得分:-2)

  1. make var_dump($result)而不是print $result因为var_dump打印变量类型(print将变量转换为字符串),所以你会看到实际价值。
  2. 使用if ($result !== 0)进行强类型比较。