phpmysqli

PHP Trouble Getting Data From Mysqli Table


I do extract a table, the table even has the correct number of rows. HOWEVER, ALL the rows have the same information: the first row, the one that indicates the headers ie: FirstName, Phone, Address, etc.

The code below shows just a bit how I am doing it. I reiterate, the mysqli connection is indeed extracting a table with data, with the correct row count. But I am not getting the correct info.

public function queryexec()
{   
  if(isset($this->query))
  {
    //execute prepared query and store in result variable.
    $this->result = $this->connection->query($this->query);
    echo 'Table Row Count: '. $this->result->num_rows;
        
        echo '<br/>';
        
        //fetch_array gives me table but only headers but correct amount of rows.
        //Fetch_object doesnt work throws me error: 
        //Fatal error: Cannot use object of type stdClass as array   
        while($row = $this->result->fetch_array()){
             
             printf ("%s (%s)\n", $row[0], $row[2][1]);
            //echo 'Table Data: '. $newdata["LastName"];
           //echo '<br/>';
        }
        
        return true;
  }
  return false;
}

Solution

  • You're calling fetch_object() but then you're accessing row elements as if it's an ordinal array.

    You should either access a column like a field of an object $row->LastName or else change the way you fetch a row to use $this->result->fetch_array().


    I just tested your code, using PHP 5.3.26, and MySQL 5.6.13. I got no errors, and I got distinct data for all three rows:

    mysql> show create table test.foo\G
    
    CREATE TABLE `foo` (
      `id` int(11) NOT NULL,
      `z` int(11) DEFAULT NULL,
      `LastName` text,
      `t` text,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    
    mysql> insert into foo (id, lastname) values 
    (1, 'Granger'), (2, 'Potter'), (3, 'Weasley');
    
    $ php 19236839.php
    Table Row Count: 3<br/>
    1 (r)
    2 (o)
    3 (e)
    

    Note that $row[2][1] returns a single character, the second character in the string.