《PHP和MySQL Web 開發》 第十一章 使用PHP從庫Web訪問MySQL數據

1.search.html

<!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

2.results.php

<!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>

 

3.從Web查詢數據庫的基本步驟

    任何用於WEB訪問數據庫的腳本中,都應遵循如下基本步驟:html

  1. 檢查並過濾來自用戶的輸入(防止用戶注入);
  2. 創建一個適當的連接;
  3. 查詢數據庫;
  4. 獲取查詢結果;
  5. 展示查詢結果給用戶;

1.檢查並過濾來自用戶的輸入(防止用戶注入);

addcslashes()和stripslashes()以及get_magic_quotes_gpc()解釋。前端

2.創建一個適當的連接;

$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);

3.查詢數據庫

查詢數據庫時,可使用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);

4.獲取查詢結果

//獲取總數據行數
    $num_results=$result->num_rows;

以上是面向對象的方法,返回的行數保存在結果對象的 num_rows成員中。

mysql_fetch_assoc() 函數從結果集中取得一行做爲關聯數組(這句我一開始沒明白...我複製 w3c 的解釋,其實就是  從數據庫查詢結果數據的行以PHP數組形式返回)。

返回根據從結果集取得的行生成的關聯數組,若是沒有更多行,則返回 false。(每一個數據行關鍵詞做爲一個屬性名,每一個值做爲數組中相應的值)

在面向對象中,使用的是$result->fetch_assoc()。

5.展示查詢結果給用戶

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);

關閉數據庫鏈接。

4.將新信息放入數據庫

1.newbook.html

<!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>

2.insert_book.php

<!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>

3.知識點!!!

mysql_affected_rows() 函數返回前一次 MySQL 操做所影響的記錄行數。

相關文章
相關標籤/搜索