mysqli_num_rows为1,但mysql_fetch_assoc返回null

时间:2014-09-14 09:52:55

标签: php mysql mysqli

我遇到了一个mysqli连接的问题,似乎在第一个障碍下降了。在继续之前,我测试了连接并且它正常工作,查询是正确的但是mysql_fetch_assoc和mysql_fetch_array中的值的var_dump为空。

代码检查是否存在具有该值的行,如果它存在则停止,如果不存在,则从数据库中提取值。这似乎在拉动价值方面做得很好。

以下是代码:

    db = new database('localhost', 'username', 'password', 'my_db');

    $db->query("SELECT * FROM `codes` WHERE `code` = '$ccode'");

    if ($db->numRows() == 0) 
    {
        echo "No value was found";

    }
    else
    {
        foreach($db->rows() as $email)
        {
            echo $email['um-email'];
            echo $ccode;
        }

    }


    $db->disconnect();   
}

以下是连接类页面的代码:

class database
{
protected $_link, $_result, $_numRows, $_content; 
public function __construct($server, $username, $password, $db)
{
    $this->_link = mysqli_connect($server, $username, $password, $db);
    mysqli_select_db($this->_link, $db);
}

public function disconnect()
{
    mysqli_close($this->_link);
}

public function query($sql)
{
    $this->_result = mysqli_query($this->_link, $sql);

    echo $sql;

    $this->_numRows = mysqli_num_rows($this->_result);
}

public function content()
{
    return $this->_content;    
}




public function display_content()
{
    $arows = array();
    for($x = 0; $x < $this->numRows(); $x++)
    {
        $arows[] = mysqli_fetch_array($this->_result);
    }
    echo var_dump($arows);
    return $arows;
}

public function numRows()
{
    return $this->_numRows;
}

public function rows()
{
    $rows = array();
    for($x = 0; $x < $this->numRows(); $x++)
    {
        $rows[] = mysqli_fetch_assoc($this->_result);
    }
    echo var_dump($rows);
    return $rows;
}
}

实际上由于导致问题的原因,DB已经获得了值并返回行数这一事实,我不明白为什么数组为空。

如果上面的代码示例,我试图从第一个代码段获取电子邮件地址:

foreach($db->display_content() as $aemail)
    {
        echo $aemail['um-email'];
    }

最终将分配给会话变量,以便稍后我使用echo来查看它是否有值。目前有一些可以防止SQL注入的位,但我想在添加验证之前使其工作。

从var_dump返回的确切消息是:

array (size=1)
0 => 
array (size=3)
  'ID' => string '3' (length=1)
  'code' => string '12345' (length=5)
  'um_email' => string 'billybob@bobmail.com' (length=20)

对于TL;当存在正确的值时,DR行数为1,mysqli_fetch_array / assoc返回null。

非常感谢我感谢所有的帮助

更新:删除Mark Ba​​ker建议的行,现在看来数据现在存储在数组中(查看var_dump)但是我现在收到的是“Undefined offset:0”值。

1 个答案:

答案 0 :(得分:0)

一个旧问题并且已经解决了,我重新设计了表单和数据库连接,在处理完这个表单之后我需要使用数组位置而不是字段的名称。

相关问题