本節介紹如何自己DIY一個數據庫管理工具,可以在頁面輸入sql 進行簡單的增刪改查操作。
首先,找到xampp的安裝目錄,打開htdocs:
新建一個php文件,名稱為 mysqladmin.php
1.編寫php服務器代碼
1.1 寫上php標簽
首先,還是在這個頁面,要寫php代碼,就需要有一個php標簽:
我們的php代碼要寫在這個標簽內。
1.2 數據庫連接操作
xampp安裝的mysql默認沒有密碼,不寫就行。
1.3 獲取form表單傳過來的sql語句
1.4 用mysql_query函數執行傳過來的sql語句
目前為止,代碼已經足以對數據庫進行增刪改,接下來,我們來設計查詢sql的實現。
1.5 用split函數分割sql語句,獲取表名
1.6 通過表名去獲取這張表所有的列,並且把列名用一個數組裝起來
1.7 去查詢sql中獲取的結果集,展示到頁面
if($tableName){
$query = mysql_query("select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME = '$tableName';") or die("<p style='color:red'>sql報錯,錯誤信息為 ======> ".mysql_error()."</p>");
//對結果集進行遍歷 -- mysql_fetch_array
$columns = array(); //儲存這張表中所有的字段名稱
$count = 0; //記錄當前的下標
echo "<table>";
echo "<tr>";
while($row = mysql_fetch_array($query)){
$columns[$count] = $row["COLUMN_NAME"];
echo "<td>" . $row["COLUMN_NAME"] . "</td>";
$count = $count + 1;
}
echo "</tr>";
//echo sizeof($columns);
$query_02 = mysql_query($sql) or die("<p style='color:red'>sql報錯,錯誤信息為 ======> ".mysql_error()."</p>");
while($row = mysql_fetch_array($query_02)){
echo "<tr>";
for($i=0;$i<sizeof($columns);$i++){
echo "<td>" . $row[$columns[$i]] . "</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
演示效果如下:
訪問地址:http://localhost:8080/mysqladmin.php
完整的mysqladmin.php 代碼:
<form action="mysqladmin.php" method="post" >
<textarea cols="80" rows="10" id="sql" name="sql"></textarea>
<br>
<input type="submit" value="執行" />
</form>
<style>
th {background: #eaeaea}
td {border:1px solid #ccc;padding:2px 10px;}
tr:hover {background: skyblue}
</style>
<?php
//1、連接數據庫
$conn = mysql_connect("localhost","root","");
//2、選擇test數據庫
$db = mysql_select_db("test",$conn);
//3、設置編碼集
mysql_query("set names utf8");
$sql = "";
if(isset($_POST["sql"]) && $_POST["sql"] != null){
$sql = $_POST["sql"];
echo "<p>您執行的sql為:$sql </p>";
echo "<script>document.getElementById('sql').value='".$sql."'</script>";
//開始真的執行sql
$query_origin = mysql_query($sql) or die("<p style='color:red'>sql報錯,錯誤信息為 ======> ".mysql_error()."</p>");
echo "<p style='color:green'>執行成功!</p>";
/*
如果是update語句,則返回一個數字
如果是select語句,則返回一個結果集,比如:Resource id #6
*/
//echo $query;
//echo strpos($query."",'Resource');
//select COLUMN_NAME from information_schema.`COLUMNS` where TABLE_NAME = 'tm_users';
//根據sql語句獲取表名
$arr = split(" ",$sql);
$tableName = "";
for($i=0;$i<sizeof($arr);$i++){
if($arr[$i] == "from"){
$tableName = $arr[$i+1];
break;
}
}
//echo $tableName;
//如果表名存在,就去查詢這個表中所有的字段
if($tableName){
$query = mysql_query("select COLUMN_NAME from information_schema.`COLUMNS` where TABLE_NAME = '$tableName'") or die("<p style='color:red'>sql報錯,錯誤信息為 ======> ".mysql_error()."</p>");
$columns = array();
$count = 0;
echo "<table cellpadding=0 cellspacing=0><tr>";
while($row=mysql_fetch_array($query)){
$columns[$count++] = $row['COLUMN_NAME'];
}
//遍歷數組
for($i=0;$i<sizeof($columns);$i++){
echo "<th>$columns[$i]</th>";
}
echo "</tr><tr>";
//然后去這張表里面查詢
while($row=mysql_fetch_array($query_origin)){
//遍歷這張表的列名,然后對應從行中取值
for($i=0;$i<sizeof($columns);$i++){
echo "<td>" . $row["$columns[$i]"] . "</td>";
}
//每遍歷好一行,就換行
echo "</tr>";
}
echo "</table>";
}
}
?>