我正在创建一个提示服务器登录信息的页面,并在提交正确的信息后重定向 . 进入下一页后,会有一个选择表单,其中包含表示数据库内部表的不同表名 . 选择一个,并单击“选择表”后,将使用PHP将数据库中的整个表显示为html中的表 . 我不知道如何计算sql表中的列数,以便能够使用循环和html表标记显示它 .
<?
session_start();
if(!isset($_SESSION['session']))
{
$_SESSION['session'] = 0;
}
if(isset($_POST['host']))
{
$_SESSION['host'] = $_POST['host'];
$_SESSION['dbname'] = $_POST['dbname'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['pw'] = $_POST['pw'];
}
?>
<!DOCTYPE html>
<html>
<body>
<?
if(isset($_POST['logout']))
{
$_SESSION['session'] = 0;
}
if(isset($_POST['submit']))
{
try
{
$db = new PDO("mysql:host=".$_POST['host'].";dbname=".$_POST['dbname'], $_POST['username'], $_POST['pw']);
}
catch(Exception $error)
{
die("Connection to user database failed: " . $error->getMessage());
}
try
{
$db->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION);
$query = "SHOW TABLES";
$results = $db->query($query)->fetchall();
$_SESSION['session']=1;
}
catch(Exception $error)
{
echo "Problem with ~query, go back to home screen";
$_SESSION['session']=0;
}
}
if($_SESSION['session'] == 0)
{?>
<form action="<?$_SERVER['PHP_SELF']?>" method="post" name='initialentry'>
<table border='0' style='text-align: center'>
<tr>
<td style='text-align: right;'>Enter host name:</td>
<td style='text-align: left;'>
<input type='text' name='host' value='localhost'>
</td>
</tr>
<tr>
<td style='text-align: right;'>Enter database name:</td>
<td style='text-align: left;'>
<input type='text' name='dbname' value='zxyx999'>
</td>
</tr>
<tr>
<td style='text-align: right;'>Enter user name:</td>
<td style='text-align: left;'>
<input type='text' name='username' value='zxyx999'>
</td>
</tr>
<tr>
<td style='text-align: right;'>Enter password:</td>
<td style='text-align: left;'>
<input type='password' name='pw' width='15' value='12345'>
</td>
</tr>
<tr>
<td style='text-align: right;'>
<input type="reset" value="Reset">
</td>
<td style='text-align: left;'>
<input name='submit' type="submit" value="Submit">
</td>
</tr>
</table>
</form>
<?}
if($_SESSION['session']==1)
{
?><form action='<?$_SERVER['PHP_SELF']?>' method='post' name='tableList'>
<select name='selected'><?
foreach($results as $row)
{
echo "<option value=".$row[0].">" . $row[0] . "</option>";
}?>
</select>
<input type="submit" name="selectTable" value="Select Table">
<input type="submit" name="logout" value="logout">
</form><?
}
if(isset($_POST['selectTable']))
{
try
{
$db = new PDO("mysql:host=".$_SESSION['host'].";dbname=".$_SESSION['dbname'], $_SESSION['username'], $_SESSION['pw']);
}
catch(Exception $error)
{
die("Connection to user database failed: " . $error->getMessage());
}
try
{
$statement = $db->prepare("SELECT * FROM ".$_POST['selected']);
$statement->execute();
}
catch(Exception $error)
{
echo "Problem with ~query";
}
echo "</br>";
echo "<table border= '1'>";
while($row = $statement->fetch())
{
echo $row['book_id'] . $row['title'];
}
echo "</table>";
}
?>
</body>
</html>
3 回答
在调用execute()之后,可以使用PDOStatement对象的columncount属性来确定结果集中的列数 .
更新:让我们看一些代码
要选择表的列数,可以使用此查询 .
您可以找到有关INFORMATION_SCHEMA here的更多信息 .
你想要使用INFORMATION_SCHEMA.COLUMNS表,如this answer所示
首先创建一个循环,在其中创建表的
<tr><th>[CONTENT]</th>...</tr>
行,然后运行现有循环以生成<tr><td>[CONTENT]</td>...</tr>
行 .您的第一个循环或多或少与您的第二个循环相同,区别在于您使用的是不同的sql结果,使用
<th>
而不是<td>
并在第二个循环中使用循环 . 这将...如果需要行/列计数,可以在每个循环中粘贴某种迭代器
第一个循环示例
第二个循环示例
注意:浏览器是智障儿童,除非在你的
部分你的
$row['book_id'] . $row['title']
有你的<tr><td>
标签不让他们填补空白 . 特别是如果这将是一个非内部网页