【问题标题】:Why is my count() returning 1 when it's empty?为什么我的 count() 为空时返回 1?
【发布时间】:2014-09-16 10:22:42
【问题描述】:

试图从数据库中返回信息(这是空的)。它不断返回值 1 但它应该为 0。数据库为空但返回“我存在”。

       <?php

set_time_limit(0);

$db = new mysqli("localhost","wwwrhino_Twitch","","wwwrhino_Twitch");

if($db->connect_errno) {
    echo $db->connect_error;
    die('Sorry, We are having some problems');
}


$offset = 0;
$count = 1;

do {
    $Brad = json_decode(file_get_contents(
        'https://api.twitch.tv/kraken/channels/greatbritishbg/follows?limit=25&offset='  . $offset
    )); 
    $Darren = json_decode(file_get_contents(
        'https://api.twitch.tv/kraken/channels/Skairpigg/follows?limit=25&offset='  . $offset
    )); 



    foreach($Brad->follows as $Bradfollow) {
        $username = (string)$Bradfollow->user->name;
    //$result = $db->query("SELECT count(Username) FROM `Users` WHERE `Username` ='$username' ");
    $result = $db->query("SELECT count(Username) AS total_users FROM `Users` WHERE `Username` ='$username' ");
    if ($result->total_users > 0) {
        echo 'I Exist!: '. (int)$result . ": " . $username . "<br>";     
        var_dump($result);
    }
    else { 
        echo 'Add me'; 
        echo "<p>Inserting Value:". $username ."</p>";
        echo "Var Dump:" . var_dump($result);
            if($insert = $db->query("
        INSERT INTO Users (Username, Minecraft_Name) 
        VALUES ('$username', 'Garrett')
        ")) {
        echo $db->affected_rows . "<br>";
        }
    }
    $offset+=25;
} while (!empty($Brad->follows));
?>

这是我的数据库:

谁能解释为什么结果总是返回为“1”

谢谢

【问题讨论】:

  • 因为$result 甚至不是一个数字。 var_dump() 看看它不等于1
  • 你没有检查抓取的行
  • @zerkms 我试过 var_dump($result)。以 1 的形式出现。
  • @Bradly Spicer:文档不同意你php.net/manual/en/mysqli.query.php
  • 更新了我的答案。希望现在它能解决问题。

标签: php mysql mysqli phpmyadmin


【解决方案1】:

你正在使用mysqli,正确的方法是-

$res = $mysqli->query("SELECT id FROM test ORDER BY id ASC");

echo "Reverse order...\n";
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
    $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

参考 - phpmanual

试试 -

$result = $db->query("SELECT count(Username) AS total_users FROM `Users` WHERE `Username` ='$username' ");
$row = $result->fetch_assoc();

并确保您可以尝试dump $row 并查看它返回的内容。然后检查正确的index-

if ($row['total_users'] > 0) {
    //your code
}

您只执行始终返回true1 的查询。您还必须从资源中获取数据。

【讨论】:

  • "它正在返回带有索引的数组" --- 这不太可能
  • 该查询将返回一个索引为count(Username)的数组。
  • 是的,但肯定不是这样。 $result 将是您必须使用 fetch_assoc 或其他东西来访问数据的资源。只有这个数据会是一个数组。
  • 知道并更新了答案。我认为$db-&gt;query 将在代码显示时返回一个对象,无需再次获取。
  • 我可以知道-1的原因吗?
【解决方案2】:

这样做:

$result = $db->query("SELECT count(Username) as cnt FROM `Users` WHERE `Username` ='$username' ");
$row = $result->result();
if ($row->cnt > 0) {
    echo 'I Exist!: '. (int)$result . ": " . $username . "<br>"; 
 }

Reference.

【讨论】:

  • 不确定 $result->result();将起作用,因为我没有在我的 foreach 中使用 ->result() 。我正在使用 Twitch API,所以它是这样的: $Brad = json_decode(file_get_contents( 'api.twitch.tv/kraken/channels/greatbritishbg/…' . $offset ));
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 2014-12-29
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多