《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 操做所影响的记录行数。

相关文章
相关标签/搜索