【问题标题】:Return false only if count is 0仅当 count 为 0 时返回 false
【发布时间】:2016-03-11 15:18:47
【问题描述】:

我试图确保我的函数仅在 count for cc0 时才返回 false。即使count 大于0,我也会不断从我的函数中返回false

我的功能:

function db_cc_exists($link, $cc) {
  $sql = "SELECT count(*) as count FROM visitors WHERE cc = '$cc' LIMIT 1";
  $result = mysqli_query($link, $sql);
  $row = mysqli_fetch_array($result);
  $ret = $row[0];

  mysqli_free_result($result);
  return (intval($ret) == 0 ? FALSE : TRUE);
}

$link是我的数据库的连接。

【问题讨论】:

  • @bansi 抱歉更新了它。我只是在测试我会从中得到什么。计数也是我表中的一列
  • 什么是$cc?您是否已经检查过错误?我不确定您是否可以使用也是列名的别名..
  • cc 是我表中的一列,即国家/地区。基本上,我正在检查国家/地区是否已经有访客。 @chris85
  • 是的,我不是在问cc 是什么;什么是$cc。如果它包含引号,则此查询将失败(除非您之前逃脱了?)。
  • print_r($row);exit();并说出它返回了什么?

标签: php sql select return


【解决方案1】:

$ret ($row[0]) 是一个数组。使用 $ret['count']

return (intval($ret['count']) == 0 ? FALSE : TRUE);

更新

我相信我原来的答案实际上是不正确的。

mysqli_fetch_array 有 2 个参数 - 第二个是要返回的数组类型。默认值为 MYSQLI_BOTH,它创建一个包含数字索引(在您的情况下为元素“0”)和关联索引(在您的情况下为“count”)的数组。

$row[0]; 应该已经返回了计数。

第二个参数的选项

/* numeric array */
$row = mysqli_fetch_array($result, MYSQLI_NUM);

/* associative array */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

/* associative and numeric array */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);

如果您按照我的原始答案使用intval($ret['count'],您应该收到错误“Illegal string offset 'count'”。

一个简单的测试是在设置后放置一个var_dump($row) 语句以查看返回的内容。

你应该得到类似的东西:

array(2) { [0]=> string(5) "123" ["count"]=> string(5) "123" } 

【讨论】:

  • 工作......正是我想要的。你能解释一下吗?
  • 我已经更新了我的答案,但我的答案应该是不正确的。我不太确定为什么您的原始代码不起作用。在设置$row 之后放置var_dump($row) 语句以查看返回的内容。
【解决方案2】:

您的查询返回从0 到记录数的任何值。所以试试这样的条件。

请尝试像这样检查。

function db_cc_exists($link, $cc) {
  $sql = "SELECT count(*) as count FROM visitors WHERE cc = '$cc' LIMIT 1";
  $result = mysqli_query($link, $sql);
  $row = mysqli_fetch_array($result);    
  mysqli_free_result($result);
  return ($row[0] ? TRUE : FALSE);
}

【讨论】:

  • 当然,由你决定。我只是指出答案应该包含对正在发生的事情的解释。如果有 5 个人回答这个问题,我不希望 OP 仅仅因为他们说 try this.. 而尝试所有 5 个答案
  • @chris85 我知道,但让我喘口气再补充一点!!
猜你喜欢
  • 2017-01-24
  • 2022-01-07
  • 2016-12-08
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多