所以我有一个完整工作的页面来显示我的数据库中所有可用表的下拉列表。但是我希望它显示除一个表之外的所有表的列表(因为其中一个表包含我不希望显示的用户信息...) 有没有办法做到这一点?
这是我到目前为止的代码部分...... $ sql ="显示来自$ dbname"; $ result = mysql_query($ sql);
if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
if (mysql_select_db($dbname, $conn))
{
?>
<form method="post" action="Browse.php">
<select name="tables">
<?php
while ($row = mysql_fetch_row($result)) {
?>
<?php
echo '<option value="'.$row[0].'">'.$row[0].'</option>';
}
?>
</select>
<input type="submit" value="Show">
</form>
<?php
//mysql_free_result($result);
if (isset($_POST) && isset($_POST['tables']))
{
$tbl=$_POST['tables'];
//echo $_POST['tables']."<br />";
$query="SELECT * from $tbl ORDER BY title ASC";
$res=mysql_query($query);
//echo $query;
if ($res)
{
?>
<table border="1">
<?php
while ( $row = mysql_fetch_array($res))
{
echo "<tr>";
//echo "<td>".$row[0]."</td>";
echo "<td>".$row[1]."</td>";
//echo "<td>".$row[2]."</td>";
//echo "<td>".$row[3]."</td>";
echo "</tr>";
} ?>
</table>
<?php
}
}
}
如果没有一个简单的方法可以做到这一点并不重要,因为我已经知道通过执行$query="SELECT * from $tbl ORDER BY title ASC";
它不会显示数据(因为用户详细信息表中没有标题列) ..但我不希望表格名称显示在下拉框中
只是一般的查询... 感谢
答案 0 :(得分:3)
试试这个:
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_data_base_name'
AND table_name NOT LIKE '%USER_TABLE%';
没有喜欢
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_data_base_name' AND table_name <> 'USER_TABLE';
答案 1 :(得分:2)
您可以在SHOW TABLES语句中使用where子句。
诀窍是要知道SHOW TABLES语句生成的列的名称,因为其名称取决于您的数据库名称。列的名称将为“ tables_in_ {your_dbname}”。因此,如果您的数据库名称为“ blah”,则列名称将为“ tables_in_blah”。
因此,如果要从结果集中省略的表称为“ secret_table”,则可以执行如下语句:
SHOW TABLES WHERE tables_in_blah <> 'secret_table';
或者,如果您想使用通配符,可以这样做:
SHOW TABLES WHERE tables_in_blah NOT LIKE '%secret_table%';
答案 2 :(得分:1)
另一种方法是在构造选项列表时避免输出有问题的表:
<?php
while ($row = mysql_fetch_row($result)) {
if ($row[0] != 'my_private_table_name') {
echo '<option value="'.$row[0].'">'.$row[0].'</option>';
}
}
?>