【问题标题】:Having issues with php operatorphp 操作符有问题
【发布时间】:2012-08-13 19:53:31
【问题描述】:

我想比较两个值,如果一个大于另一个,那么它会在数据库中执行一些更新,但是结果总是返回 false。这是我正在努力解决的代码部分的示例:

<?php 
$page = mysql_fetch_object(mysql_query("SELECT * FROM `site` WHERE `id`='{$posts['him']}'"));
$count = file_get_contents($site->site_url . 'count/numbercheck.php?url=' . ($page->url));
if(is_numeric($count) && $count > $posts['count'])
{
    echo 'true';
}else{
    echo 'false';   
}

?>

这回声是假的。 $posts['count'] 来自另一个页面上的 jquery 帖子。我确信 $count 大于 $posts['count']。只是为了确定然后我这样做了:

<?php 
$page = mysql_fetch_object(mysql_query("SELECT * FROM `site` WHERE `id`='{$posts['him']}'"));
$count = file_get_contents($site->site_url . '/count/numbercheck.php?url=' . ($page->url));
if(is_numeric($count) && $count > $posts['count'])
{
    echo 'true' . $count . ' ' . $posts['count'];
}else{
    echo 'false' . $count . ' ' . $posts['count'];  
}

?>

返回“false 86 85”。我不明白,我做错了什么?我很清楚 86 大于 85。

【问题讨论】:

  • 您是否检查过 AND 的哪一部分失败了? is_numeric 是返回 false,还是绝对是比较部分?你试过在$posts['count']上运行is_numeric吗?
  • 这可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定要使用哪一个,read this article.
  • var_dump() $count 和 $posts['count'] 值来测试它们是什么数据类型以及它们实际包含什么

标签: php operator-keyword


【解决方案1】:

file_get_contents() 返回一个字符串值,因此在使用is_numeric() 时,它总是会计算为false

如果你想返回一个数组(文件中每一行一个项目),你应该使用file()而不是file_get_contents()

【讨论】:

  • 即使字符串的内容是数字类型?
  • @Matt 根据文档,它要么返回文件内容的字符串,要么在失败时返回 false。
  • is_numeric() 对于像“42”这样的字符串返回 TRUE。 is_int() 然而,没有。 - 参见php.net/is_numeric 的示例
  • 为了完整起见,数字比较有效,因为“如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较”
  • 是的,在不知道返回文件中的值的情况下,我想在某些情况下 is_numeric 可能会返回 true。虽然,对我来说,这将是非常糟糕的编码实践,而不是专门将返回值转换为整数然后进行比较。这将使代码的读者更容易理解其意图是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多