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

PHP函数在应返回False时返回True,php,Php,我在一个非常小的类似WYSIWIG的应用程序中遇到了PHP函数的问题。以下函数确定用户是否拥有页面。它有用于调试的打印语句 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($s

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

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; }
  • 使
    var\u dump($result)
    而不是
    print$result
    ,因为var\u dump打印变量类型(print将变量转换为字符串),所以您将看到实际值
  • 使用
    if($result!==0)
    进行强类型比较

  • 你的问题是打字错误造成的,但这就是其他答案完全错误的原因

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

    返回变量中的元素数。如果变量不是数组或具有实现的可数接口的对象,则将返回1。有一个异常,如果var为NULL,则返回0

    无论在
    单行查询
    函数中发生什么情况,
    计数
    都将返回一个整数。此时,
    $result!=0和
    $result!==0
    或其他假定问题。强类型比较并不重要,因为您必须将int值与int值进行比较


    此时,您的函数是正确的,您的问题必须存在于其他地方。

    是否可以包含打印“函数已返回true”的代码?也许这就是问题所在。哦,德普。你完全正确,我忘了在变量上加$。抱歉,这是一个小问题。当$result为0时,它仍然返回true。该函数无权访问SQL结果,它由另一个函数处理。$result变量是SQL结果的第一行(也是唯一一行)。
    if(!empty($result))
    {$output = true; }