文档章节

《PHP和MySQL Web 开发》 第十一章 使用PHP从库Web访问MySQL数据

十万猛虎下画山
 十万猛虎下画山
发布于 2018/07/10 15:09
字数 1719
阅读 12
收藏 1

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 为了美观一点。

注意:select 和 input 的 name 要写对,PHP中要用。

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访问数据库的脚本中,都应遵循以下基本步骤:

  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对同时连接数据库的连接数量有限制,MySQL参数 max_connections 决定了同时连接的个数。

当从web链接数据库的时候,我们需要告诉它使用哪个数据库,在PHP中,可以调用mysqli_select_db()函数实现,也可以用面向对象的方法:

$db->select_db(dbname);

3.查询数据库

查询数据库时,可以使用mysqli_query()函数,但是使用前最好建立要运行的查询:

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

© 著作权归作者所有

十万猛虎下画山
粉丝 6
博文 130
码字总数 98614
作品 0
朝阳
程序员
私信 提问
Linux监控平台介绍zabbix监控介绍安装zabbix

Linux监控平台介绍 监控存在的原因 站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大 常见开源监控软件 cacti、nagios、zabbix、smokeping、open-falcon等等,其中nag...

弓正
2018/12/24
0
0
centos下编译安装LAMP环境

一、LAMP 1.LAMP简介 LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代表的方面功能非常强大的组件...

ZIJIAN1012
2018/06/26
0
0
LAMP平台部署及应用

LAMP架构是目前最为成熟的企业网站应用模式,指的是协同一整套系统和相关软件,提供动态Web站点及其应用开发环境。具体包括Linux系统、Apache、MySQL、PHP(或Perl、Python) LAMP平台的应用...

杨书凡
2017/12/14
0
0
Linux监控平台介绍zabbix监控介绍安装zabbix 忘记Admin密码如何做

Linux监控平台介绍 监控存在的原因 站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大 常见开源监控软件 cacti、nagios、zabbix、smokeping、open-falcon等等,其中nag...

lyy549745
2018/07/08
0
0
Linux监控平台介绍&zabbix监控介绍&安装zabbix&忘记Admin密码如何做

19.1 Linux监控平台介绍 • 常见开源监控软件有cacti、nagios、zabbix、smokeping、open-falcon等等 • cacti、smokeping偏向于基础监控,成图非常漂亮 • cacti、nagios、zabbix服务端监控中...

影夜Linux
2018/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IPv4如何转换为IPv6?

导读 ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv...

问题终结者
11分钟前
0
0
SpringBoot2.0高级案例(05):整合 Swagger2 ,构建接口管理界面

一、Swagger2简介 1、Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档。省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试功能来调试RESTful API。 2、...

知了一笑
24分钟前
4
0
关于观察者模式总结

观察者模式(发布订阅模式):在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会收到通知,并自动更新。 使用场景:当一个对象状态改变同时需要改变其他对象,且...

cherryboy
30分钟前
0
0
Gradle Sync太慢?你需要使用阿里云仓库服务的代理仓库地址代替jcenter()、maven

在天朝使用jcenter、mavenCentral及google三个远程仓库,Gradle Sync会很慢,goole仓库甚至需要科学上网才能访问。为了加快Gradle Sync速度,一招教你优先用 阿里云仓库服务 的仓库作为下载源...

丁佳辉
42分钟前
2
0
maven打包后运行提示“没有主清单属性”的解决办法

在项目的pom.xml文件里添加如下内容: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>m......

shatian
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部