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