<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>第十一章 使用PHP從庫Web訪問MySQL數據</title> <link rel="stylesheet" href="../../static/css/bootstrap.min.css"> </head> <body> <h1>《PHP和MySQL Web 開發》 第十一章 使用PHP從庫Web訪問MySQL數據</h1> <div class="container"> <form action="results.php" method="POST"> <div class="form-group"> <label for="exampleInputEmail1">選擇搜索類型</label> <select class="form-control" name="searchtype"> <option value="author">做者</option> <option value="title">標題 </option> <option value="isbn">isbn</option> </select> </div> <div class="form-group"> <label>輸入關鍵字</label> <input name="searchterm" type="text" class="form-control"> </div> <button type="submit" class="btn btn-success">Submit</button> </form> </div> </body>
HTML沒啥說的了,前端都會,我在裏面引入了bootstrap.css 爲了美觀一點。php
注意:select 和 input 的 name 要寫對,PHP中要用。css
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>查詢結果</title> <link rel="stylesheet" href="../../static/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>查詢結果</h1> <a href="http://127.0.0.2:4787/php/books/search.html"><h2>返回</h2></a> <?php //建立短變量名稱 $searchtype = $_POST['searchtype']; $searchterm = trim($_POST['searchterm']);//經過trim()過濾用戶不當心輸入的空白字符 //驗證用戶提交數據是否存在 if (!$searchtype || !searchterm) { echo '<h2 class="waring">You have not entered search details.Please go back and try again.<smal>您沒有輸入搜索細節。請返回並再試一次。</smal></h2>'; exit; } // if(!get_magic_quotes_gpc()){ // $searchtype=addcslashes($searchtype); // $searchterm=addcslashes($searchterm); // } $db = new mysqli('鏈接地址', '用戶名t', '密碼', '數據庫名稱'); // var_dump($db); if (!$db) { die("鏈接失敗: " . mysqli_connect_errno()); } $query = "select * from books where " . $searchtype . " like '%" . $searchterm . "%'"; // $query="select * from books limit 6"; // $query="select * from books"; $result = $db->query($query); //獲取總數據行數返回的行數保存在結果對象的 num_rows成員中 $num_results = $result->num_rows; // var_dump($num_results); echo '<h2>找到' . $num_results . '本書</h2>'; echo '<table class="table table-striped"><thead><tr><th>序號</th><th>標題</th><th>做者</th><th>ISBN</th></tr></thead><tbody>'; for ($i = 0; $i < $num_results; $i++) { //mysql_fetch_assoc() 函數從結果集中取得一行做爲關聯數組(這句我一開始沒明白...我複製 w3c 的解釋,其實就是 從數據庫查詢結果數據的行以PHP數組形式返回)。 // 返回根據從結果集取得的行生成的關聯數組,若是沒有更多行,則返回 false。(每一個數據行關鍵詞做爲一個屬性名,每一個值做爲數組中相應的值),使用的是$result->fetch_assoc()。 $row = $result->fetch_assoc(); //調用stripslashes() 函數以便在顯示前整理被轉義的值。 echo '<tr><td>' . ($i + 1) . '</td><td>' . htmlspecialchars(stripslashes($row['title'])) . '</td><td>' . stripcslashes($row['author']) . '</td><td>' . stripcslashes($row['isbn']) . '</td><td>' . stripcslashes($row['price']) . '</td></tr>'; } echo '</table>'; $result->free(); $db->close(); ?> </div> </body>
任何用於WEB訪問數據庫的腳本中,都應遵循如下基本步驟:html
addcslashes()和stripslashes()以及get_magic_quotes_gpc()解釋。前端
$db=new mysqli('localhost','test','passworld','books');
以上代碼實例化了mysqli(i表示改進)類而且建立了到主機localhost 的連接 用戶名是test 密碼是passworld 使用的是books數據庫。mysql
這種是面向對象的方法,能夠調用這個對象的方法來訪問數據庫。web
MySQL對同時鏈接數據庫的鏈接數量有限制,MySQL參數 max_connections 決定了同時鏈接的個數。sql
當從web連接數據庫的時候,咱們須要告訴它使用哪一個數據庫,在PHP中,能夠調用mysqli_select_db()函數實現,也能夠用面向對象的方法:數據庫
$db->select_db(dbname);
查詢數據庫時,可使用mysqli_query()函數,可是使用前最好創建要運行的查詢:bootstrap
$query="select * from books where ".$searchtype." like '%".$searchterm."%'"; $query="select * from books limit 6"; $query="select * from books";
在這個例子中,使用了用戶指定字段($searchtype)中搜索用戶輸入值($searchterm)。注意咱們使用了類似(like)邏輯用於匹配而不是相等邏輯。數組
咱們能夠運行以下查詢:
$result=$db->query($query);
//獲取總數據行數 $num_results=$result->num_rows;
以上是面向對象的方法,返回的行數保存在結果對象的 num_rows成員中。
mysql_fetch_assoc() 函數從結果集中取得一行做爲關聯數組(這句我一開始沒明白...我複製 w3c 的解釋,其實就是 從數據庫查詢結果數據的行以PHP數組形式返回)。
返回根據從結果集取得的行生成的關聯數組,若是沒有更多行,則返回 false。(每一個數據行關鍵詞做爲一個屬性名,每一個值做爲數組中相應的值)
在面向對象中,使用的是$result->fetch_assoc()。
for ($i = 0; $i < $num_results; $i++) { $row = $result->fetch_assoc(); echo '<tr><td>' . ($i + 1) . '</td><td>' . htmlspecialchars(stripslashes($row['title'])) . '</td><td>' . stripcslashes($row['author']) . '</td><td>' . stripcslashes($row['isbn']) . '</td><td>' . stripcslashes($row['price']) . '</td></tr>'; }
若是調用以下語句,能夠是釋放結果集:
$result->free();
注意:此處別忘了寫()。我就忘寫了。
或者
mysqli_free_result($result);
而後使用
$db->close(); //或者mysqli_close($db);
關閉數據庫鏈接。
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>第十一章 使用PHP從庫Web訪問MySQL數據</title> <link rel="stylesheet" href="../../static/css/bootstrap.min.css"> </head> <body> <h1>《PHP和MySQL Web 開發》 第十一章 使用PHP從庫Web訪問MySQL數據</h1> <div class="container"> <p>0-672-31000-X</p> <form action="insert_book.php" method="POST"> <table class="table"> <tr class="form-group"> <tr>ISBN</tr> <tr> <input required="required" name="isbn" type="text" class="form-control" placeholder="例如:0-672-31000-4"> </tr> </tr> <tr class="form-group"> <tr>author</tr> <tr> <input required="required" name="author" type="text" class="form-control" > </tr> </tr> <tr class="form-group"> <tr>title</tr> <tr> <input required="required" name="title" type="text" class="form-control"> </tr> </tr> <tr class="form-group"> <tr>price</tr> <tr> <input required="required" name="price" maxlength="7" size="7" type="text" class="form-control" > </tr> </tr> <tr class="form-group"> <td colspan="2"> <button type="submit" class="btn btn-success">Submit</button></td> </tr> </table> </form> </div> </body>
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>查詢結果</title> <link rel="stylesheet" href="../../static/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>查詢結果</h1> <h2> <a href="http://127.0.0.2:4787/php/books/search.html">返回</a> </h2> <h2> <a href="http://127.0.0.2:4787/php/books/newbook.html">新增圖書</a> </h2> <?php //建立短變量名稱 $isbn = $_POST['isbn']; $author = $_POST['author']; $title = $_POST['title']; $price = $_POST['price']; //驗證用戶提交數據是否存在 if (!$isbn || !$author || !$title||!$price) { echo '都給哥填上,少一個都不行'; exit; } // if(!get_magic_quotes_gpc()){ // $searchtype=addcslashes($searchtype); // $searchterm=addcslashes($searchterm); // } $db = new mysqli('localhost', 'xxx', 'xxxxx', 'books'); // var_dump($db); if (!$db) { die("鏈接失敗: " . mysqli_connect_errno()); } $query = "insert into books values ('".$isbn."','".$author."','".$title."','".$price."')"; $result = $db->query($query); if($result){ echo $db->affected_rows."書已經插入進數據庫"; }else{ echo "出錯了"; }; $db->close(); ?> </div> </body>
mysql_affected_rows() 函數返回前一次 MySQL 操做所影響的記錄行數。