Jump to content

mysql_num_rows not working correctly


AdRock

Recommended Posts

I am having a problem getting the number of fow in my database using my database class and I can't see why it's doing it.

 

What i want to do is count the numbe of rows in my query and if it's greater than 1, call a function but it's not calling the function becuase it says there is only 1 row even though there are others.

 

This is the code i am using which tells me i only have 1 record

<?php
    /**
    * The home page of the website
    */
    // The title of the page
    $title = "The latest news at JackGodfry.org.uk";

    // Include the init file to connect to database,
    // regsiter the sessions and include the functions 
    include("php/init.php");

    // Include the header html
    require_once("header.inc.php");
?>

<h1>Latest News</h1>
<div id="news">
<?php 

$path = "news";
$webpage = basename($path); 

$db = & new MySQL($host,$dbUser,$dbPass,$dbName);

$sql="Select count(*) from news";

// Perform a query getting back a MySQLResult object
$result = $db->query($sql);

//get the number of rows in datatbase
$test = $result->size();

$numrows = $result->fetchrow();
  
if(isset($_GET['pagenum'])?$page = $_GET['pagenum']:$page = 1); 
$entries_per_page = 1;   

$total_pages = ceil($numrows[0]/$entries_per_page); 
$offset = (($page * $entries_per_page) - $entries_per_page); 
				   						
$sql="SELECT id,title,content, DATE_FORMAT(time, '%W %D %M %Y') as date, photo, alternate FROM news WHERE archived='n' ORDER BY id DESC LIMIT $offset,$entries_per_page";

// Perform a query getting back a MySQLResult object
$result = $db->query($sql);

$err = $result->size();

if($err == 0) {
echo ("No matches met your criteria."); 
} else {
// Iterate through the results
while ($row = $result->fetch()) {
	$title = htmlentities(strtoupper($row['title'])); 
	$content = htmlentities($row['content']);

	if (!$row['photo']){ 
		echo "<h3>".$title."</h3><p class='italic'>Date added: ".$row['date']."</p><p>".nl2br($content)."</p><br />\n";	
	} else {
		echo "<h3>".$title."</h3><p class='italic'>Date added: ".$row['date']."</p><p><img src='images/large/".$row['photo']."' alt='".$row['alternate']."' class='imgright' />".nl2br($content)."</p><br />\n";
	}
}
//or after the results
if($test > 1) pagination_five($total_pages,$page);

echo $test; //echoes out 1
}
echo "</div>";	

require_once("footer.inc.php");
?>

and here is the database class which i got from a book

<?php
/**
* @package SPLIB
* @version $Id: MySQL.php,v 1.1 2003/12/12 08:06:07 kevin Exp $
*/
/**
* MySQL Database Connection Class
* @access public
* @package SPLIB
*/
class MySQL {
    /**
    * MySQL server hostname
    * @access private
    * @var string
    */
    var $host;

    /**
    * MySQL username
    * @access private
    * @var string
    */
    var $dbUser;

    /**
    * MySQL user's password
    * @access private
    * @var string
    */
    var $dbPass;

    /**
    * Name of database to use
    * @access private
    * @var string
    */
    var $dbName;

    /**
    * MySQL Resource link identifier stored here
    * @access private
    * @var string
    */
    var $dbConn;

    /**
    * Stores error messages for connection errors
    * @access private
    * @var string
    */
    var $connectError;

    /**
    * MySQL constructor
    * @param string host (MySQL server hostname)
    * @param string dbUser (MySQL User Name)
    * @param string dbPass (MySQL User Password)
    * @param string dbName (Database to select)
    * @access public
    */
    function MySQL ($host,$dbUser,$dbPass,$dbName) {
        $this->host=$host;
        $this->dbUser=$dbUser;
        $this->dbPass=$dbPass;
        $this->dbName=$dbName;
        $this->connectToDb();
    }

    /**
    * Establishes connection to MySQL and selects a database
    * @return void
    * @access private
    */
    function connectToDb () {
        // Make connection to MySQL server
        if (!$this->dbConn = @mysql_connect($this->host,
                                      $this->dbUser,
                                      $this->dbPass)) {
            trigger_error('Could not connect to server');
            $this->connectError=true;
        // Select database
        } else if ( !@mysql_select_db($this->dbName,$this->dbConn) ) {
            trigger_error('Could not select database');
            $this->connectError=true;
        }
    }

    /**
    * Checks for MySQL errors
    * @return boolean
    * @access public
    */
    function isError () {
        if ( $this->connectError )
            return true;
        $error=mysql_error ($this->dbConn);
        if ( empty ($error) )
            return false;
        else
            return true;
    }

    /**
    * Returns an instance of MySQLResult to fetch rows with
    * @param $sql string the database query to run
    * @return MySQLResult
    * @access public
    */
    function & query($sql) {
        if (!$queryResource=mysql_query($sql,$this->dbConn))
            trigger_error ('Query failed: '.mysql_error($this->dbConn).
                           ' SQL: '.$sql);
        return new MySQLResult($this,$queryResource);
    }
}

/**
* MySQLResult Data Fetching Class
* @access public
* @package SPLIB
*/
class MySQLResult {
    /**
    * Instance of MySQL providing database connection
    * @access private
    * @var MySQL
    */
    var $mysql;

    /**
    * Query resource
    * @access private
    * @var resource
    */
    var $query;

    /**
    * MySQLResult constructor
    * @param object mysql   (instance of MySQL class)
    * @param resource query (MySQL query resource)
    * @access public
    */
    function MySQLResult(& $mysql,$query) {
        $this->mysql=& $mysql;
        $this->query=$query;
    }

    /**
    * Fetches a row from the result
    * @return array
    * @access public
    */
    function fetch () {
        if ( $row=mysql_fetch_array($this->query,MYSQL_ASSOC) ) {
            return $row;
        } else if ( $this->size() > 0 ) {
            mysql_data_seek($this->query,0);
            return false;
        } else {
            return false;
        }
    }

    /**
    * Returns the number of rows selected
    * @return int
    * @access public
    */
    function size () {
        return mysql_num_rows($this->query);
    }

function fetchrow () {
	return mysql_fetch_row($this->query);
}

    /**
    * Returns the ID of the last row inserted
    * @return int
    * @access public
    */
    function insertID () {
        return mysql_insert_id($this->mysql->dbConn);
    }
    
    /**
    * Checks for MySQL errors
    * @return boolean
    * @access public
    */
    function isError () {
        return $this->mysql->isError();
    }
}
?>

Link to comment
https://forums.phpfreaks.com/topic/117115-mysql_num_rows-not-working-correctly/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.