【发布时间】:2012-02-01 08:57:09
【问题描述】:
我已经复制了这个功能:
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(),结果一样。
【问题讨论】:
-
做一些调试。您的查询返回什么?结果集中有行吗?
-
connect()和prepare()在做什么? -
让我检查一下查询返回的内容。但结果只是
Array。 -
我在您的编辑中看到现在包括连接。尝试check for errors。我删除了我以前的答案。