久违的练习一下,这次是以製作一个会员登入、注册的介面为目标所学习的一个历程,所用技术不外乎HTML、CSS、PHP、MySQL,主要以PHP串接MySQL为主,而本文章先以其核心功能增删改查做一个应用。
database & php
利用phpmyadmin创建好资料库。
再来,我们要在php创建一个专门连结资料库的档案。
$host : 先设定资料库资讯,主机通常都用本机。
$dbuser : 以root管理者帐号进入资料库。
$dbpassword : root的资料库密码。
$dbname : 登入后要使用的资料库(名称)。mysqli_connect连结资料库('资料库主机','登入帐号','登入密码','要开启的资料库名称')
接着利用if判断是否有成功连结资料库,有的话利用mysqli_query来针对我们指定的资料库,执行所要使用的sql语法。mysqli_query用来使用资料库的语法,(connection要连结的资料库,query资料库语法,resultmode常数(可有可无))
,此处无用到resultmode常数。
连结正确显示正确连接资料库,反之且显示错误资讯(利用mysqli_connect_error()来获取错误资讯)。
<?php$host = 'localhost';$dbuser ='root';$dbpassword = '';$dbname = 'member_db';$link = mysqli_connect($host,$dbuser,$dbpassword,$dbname);if($link){ mysqli_query($link,'SET NAMES uff8'); // echo "正确连接资料库";}else { echo "不正确连接资料库</br>" . mysqli_connect_error();}?>
再来我们製作一个页面(index),可以跳转至对应功能。
在最上面来载入我们的db.php以连结资料库。
<?php// 载入db.php来连结资料库require_once 'db.php';?><!doctype html><!-- lang代表网页主要语言,如果有设对于搜寻引擎是友善的,对于浏览器在判断是有帮助的 --><html lang="zh-Hant-TW">......<body><ul> <li><a href="select.php">SELECT,查询列出资料库的资料</a></li> <li><a href="insert.php">INSERT,新增资料到资料表</a></li> <li><a href="update.php">UPDATE,更新资料表中的资料</a></li> <li><a href="delete.php">DELETE,删除资料表中的资料</a></li> </ul></body>
select
首先我们一样连结资料库,并且设置一个空阵列($datas)来放我们查询回来的资料,而$sql则是放我们所要执行的sql语法并利用mysqli_query执行,并将结果存在变数($result)中。
<?php// 载入db.php来连结资料库require_once 'db.php';?><h3>sql查询结果</h3><?php// 设置一个空阵列来放资料$datas = array();// sql语法存在变数中$sql = "SELECT `account`, `name` FROM `user` AS userData WHERE `id`=1 ";// 用mysqli_query方法执行(sql语法)将结果存在变数中$result = mysqli_query($link,$sql);
接着,利用if判断式,判断资料是否成功获取,如果有,我们可以利用mysqli_num_rows回传资料数量
,做二次确认资料获取正确,如>0才会进入下一步,接着利用while迴圈,搭配mysqli_fetch_assoc一次取得结果的一笔值
,跑一次就抓一笔值,一个个放进阵列。
// 如果有资料if ($result) { // mysqli_num_rows方法可以回传我们结果总共有几笔资料 if (mysqli_num_rows($result)>0) { // 取得大于0代表有资料 // while迴圈会根据资料数量,决定跑的次数 // mysqli_fetch_assoc方法可取得一笔值 while ($row = mysqli_fetch_assoc($result)) { // 每跑一次迴圈就抓一笔值,最后放进data阵列中 $datas[] = $row; } } // 释放资料库查到的记忆体 mysqli_free_result($result);}else { echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);}// 处理完后印出资料if(!empty($result)){ // 如果结果不为空,就利用print_r方法印出资料 print_r($datas);}else { // 为空表示没资料 echo "查无资料";}?>
而我们也可以使用foreach来呈现结果。
而在此处我们须特别注意:
左括号({
)换成冒号(:
),把右括号(}
)分别换成endif、endwhile、endfor、endforeach、endswitch;
Ex:
<?php if( $a<0 ): ?>小于0 <?php endif; ?> 上面的语句等同于<?php if( $a<0 ){?> 小于0 <?php }?>
利用foreach取出row下的资料,account,name...,最后别忘记利用mysqli_close($link)结束资料库的连结。
<h3>foreach列出查询结果</h3><div><?php if(!empty($datas)): ?><ul><!-- 资料 as key(下标) => row(资料的row) --><?php foreach ($datas as $key => $row) :?><li>第<?php echo($key +1 ); ?> 笔资料,帐号<?php echo $row['account']; ?>,名字 <?php echo $row['name']; ?></li><?php endforeach; ?></ul><?php else: ?>查无资料<?php endif; ?></div><!-- 代表结束连线 --><?php mysqli_close($link); ?>
结果如下:
insert
再来是我们的插入值,也就是新增资料,这边比较要注意的就是,判断的部分,我们使用mysqli_affected_rows来检查资料库数量的异动
,有的话代表新增成功,并且使用mysqli_insert_id
获取第一笔id,并且输出我们所新增的资料id即可。
<?php// 载入db.php来连结资料库require_once 'db.php';?><h3>sql插入结果</h3><?php// sql语法存在变数中$sql = "INSERT INTO `user` (`account`,`password`, `name`) VALUE ('ddd@gmail.com','dd12345','dd') ";// 用mysqli_query方法执行(sql语法)将结果存在变数中$result = mysqli_query($link,$sql);// 如果有异动到资料库数量(更新资料库)if (mysqli_affected_rows($link)>0) {// 如果有一笔以上代表有更新// mysqli_insert_id可以抓到第一笔的id$new_id= mysqli_insert_id ($link);echo "新增后的id为 {$new_id} ";}elseif(mysqli_affected_rows($link)==0) { echo "无资料新增";}else { echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);} mysqli_close($link); ?>
update
接着是更新资料,与新增资料大同小异,只有sql语法上的不同。
<?php// 载入db.php来连结资料库require_once 'db.php';?><h3>sql更新结果</h3><?php// sql语法存在变数中$sql = "UPDATE `user` SET `password` = '557gfg', `name`='87dd' WHERE `id`= 6;";// 用mysqli_query方法执行(sql语法)将结果存在变数中$result = mysqli_query($link,$sql);// 如果有异动到资料库数量(更新资料库)if (mysqli_affected_rows($link)>0) {echo "资料已更新";}elseif(mysqli_affected_rows($link)==0) { echo "无资料更新";}else { echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);} mysqli_close($link); ?>
delete
最后是我们的删除,跟新增、更新大同小异。
<?php// 载入db.php来连结资料库require_once 'db.php';?><h3>sql删除结果</h3><?php// sql语法存在变数中$sql = "DELETE FROM `user` WHERE `id`= 6;";// 用mysqli_query方法执行(sql语法)将结果存在变数中$result = mysqli_query($link,$sql);// 如果有异动到资料库数量(更新资料库)if (mysqli_affected_rows($link)>0) {echo "资料已删除";}elseif(mysqli_affected_rows($link)==0) { echo "无资料删除";}else { echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);} mysqli_close($link); ?>