我已经复制了这个功能:
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()
,同样的结果。
答案 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])