Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDO SHOW TABLES array

Just working with this function and it's not working out as planned. It is supposed to grab all table names in a database and store them in an array. However the results of the array is doubling up the array shown in the example below:

Array ( [0] => 113340 ) 
Array ( [0] => 113340 [1] => 116516 ) 
Array ( [0] => 113340 [1] => 116516 [2] => 139431 ) 
Array ( [0] => 113340 [1] => 116516 [2] => 139431 [3] => 20731 ) 
Array ( [0] => 113340 [1] => 116516 [2] => 139431 [3] => 20731 ... )

The code that I am using:

function itemDiscontinued($dbh, $id, $detail) {
  try {
    $tableList = array();
    $result = $dbh->query("SHOW TABLES");
    while ($row = $result->fetch(PDO::FETCH_NUM)) {
      $tableList[] = $row[0];
      print_r($tableList);
    }
  }
  catch (PDOException $e) {
    echo $e->getMessage();
  }
}
like image 467
DrDog Avatar asked Apr 25 '13 11:04

DrDog


2 Answers

to get all names of the tables this is much better

public function list_tables()
{
    $sql = 'SHOW TABLES';
    if($this->is_connected)
    {
        $query = $this->pdo->query($sql);
        return $query->fetchAll(PDO::FETCH_COLUMN);
    }
    return FALSE;
}
like image 173
Steeven Andrian Salim Avatar answered Oct 21 '22 09:10

Steeven Andrian Salim


You are printing the array in the while loop! This will print it each time you add an item to it from the recordset. Instead you need to print it once it has completed populating like so:

function itemDiscontinued($dbh, $id, $detail) {
    try {   
        $tableList = array();
        $result = $dbh->query("SHOW TABLES");
        while ($row = $result->fetch(PDO::FETCH_NUM)) {
            $tableList[] = $row[0];
        }
        print_r($tableList);
    }
    catch (PDOException $e) {
        echo $e->getMessage();
    }
}
like image 3
Ben Carey Avatar answered Oct 21 '22 10:10

Ben Carey