我的功能出了什么问题?

时间:2012-02-01 08:57:09

标签: php mysql

我已经复制了这个功能:

function getTables()
  {
      global $db;

      $value = array();
      if (!($result = $db->query('SHOW TABLES'))) {
          return false;
      }
      while ($row = $db->fetchrow($result)) {
          if (empty($this->tables) or in_array($row[0], $this->tables)) {
              $value[] = $row[0];
          }
      }
      if (!sizeof($value)) {
          $db->error("No tables found in database");
          return false;
      }
      return $value;
  }

以这种方式:

public function getTables() {

    $value = array();

    $tables = array();

    $sql = "SHOW TABLES";

    if($stmt = $this->connect->prepare($sql)) {
        $stmt->execute(); 
        while( $row = $stmt->fetch_row() ) {        
            if(empty($tables) or in_array($row[0], $tables)) {
                $value[0] = $row[0];
            }       
        }

        $stmt->close();

        if(!sizeof($value)) {
            echo 'The database has no tables';
        }

        return $value;

    } else {

        echo 'Couldn\t query the database';

    }

}

但第二种方法返回The database has no tables,这不是真的,因为我在数据库中有一个表。

第二种方法有什么问题?

如果您想知道connect做了什么:

public $connect;
public function __construct() {
    // Define The Database Connection Or Die If Failed Connecting
    $this->connect = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(DB_CONNECTION_ERROR_MESSAGE);
}

它与数据库建立连接。 prepare()这是一个mysqli声明。我也尝试了query(),同样的结果。

2 个答案:

答案 0 :(得分:1)

正确的代码。使用query代替prepare

public function getTables()
{
    $value = array();
    $tables = array();

    $sql = "SHOW TABLES";

    if ($res = $this->connect->query($sql))
    {
        while ($row = $res->fetch_row())
        {
            if (empty($tables) or in_array($row[0], $tables))
            {
                $value[] = $row[0];
            }
        }

        if (!sizeof($value))
        {
            echo 'The database has no tables';
        }

        return $value;
    }
    else
    {
        echo 'Could not query the database';
    }
}

如果您仍想使用prepare,则还需要$stmt->bind_result$stmt->fetch()而不是fetch_row

答案 1 :(得分:0)

我认为这段代码已被破坏 $value[] = $row[0]; 也许你应该把它改成 $value[0] = $row[0];array_push($value, $row[0])