要做开发性实验,以下是基于三日通的一二天关于mysql的操作,然后对其修改,加点自己东西,方便以后忘了直接套就行
三日通原链接https://www.2cto.com/kf/200605/8911.html,不过代码很旧,直接运行会错
一:创建MySQL的数据库和数据表(数据库和数据表不是同一个东西,包含的关系)
<?php
$db=mysqli_connect("localhost","root","*****")or die("connect fail");//连接失败则输出connect fail
mysqli_query($db,"CREATE DATABASE my_db");//创建一个数据库,注与mysql_query的参数不一样
mysqli_select_db($db,"my_db");//选择数据库
$sql = "CREATE TABLE employees
(
id int(4) NOT NULL AUTO_INCREMENT,
first varchar(20),
last varchar(20),
address varchar(255),
position varchar(50),
PRIMARY KEY (id),
UNIQUE id (id)
)";//创建表id自增加
//$result=mysqli_query($db,$sql)or die(mysqli_error($db));//执行创建表的语句执行
$first = array('Bob','John','Bred');
$last = array('Smith','Reborts','Johnson');
$address = array('128 Here St, Cityname','45 There St , Townville','1/34 Nowhere Blvd, Snowston');
$position = array('Marketing Manager','Telephonist','Doorman');
$i=0;
echo "$first[$i]";
for($i=0;$i<3;$i++)
mysqli_query($db,"INSERT IGNORE INTO employees VALUES ($i+1,'$first[$i]','$last[$i]','$address[$i]','$position[$i]');")or die(mysqli_error($db));//插入数据
mysqli_close($db);
注释:
- mysqli_error可以输出与数据库各种操作语句的错误id那如果DEFAULT '0' NOT NULL AUTO_INCREMENT会报错,原因是id的默认值和自增长冲突,所以要删掉其中一个
- mysql中UNIQUE KEY和PRIMARY KEY有什么区别:
主键约束:PRIMARY KEY,用了这个好像会默认添加一个UNIQUE KEY
唯一键:UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。
1,Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。
而UNIQUE KEY 对列没有此要求
2,一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY
3,主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,
则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。
alter table t add constraint uk_t_1 unique (a,b);
insert into t (a ,b ) values (null,1); # 不能重复
insert into t (a ,b ) values (null,null);#可以重复
3.创建数据表再创建会报已经存在,直接注释掉好了
4.INSERT IGNORE的这个IGNORE会帮你跳过重复的数据
二:while获取数据库的数据
<?php
@$id=$_GET['id'];
$db = mysqli_connect("localhost", "root","******");
mysqli_select_db($db,"my_db")or die(mysqli_error());
// display individual record
// 显示单条记录内容
if ($id) {
$result = mysqli_query($db,"SELECT * FROM employees WHERE id=$id");
$myrow = mysqli_fetch_array($result);
printf("名: %s\n<br>", $myrow["first"]);
printf("姓: %s\n<br>", $myrow["last"]);
printf("住址: %s\n<br>", $myrow["address"]);
printf("职位: %s\n<br>", $myrow["position"]);
} else {
// show employee list
// 显示员工列表
$result = mysqli_query($db,"SELECT * FROM employees");
if ($myrow = mysqli_fetch_array($result)) {
// display list if there are records to display
// 如果有记录,则显示列表
do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $_SERVER["PHP_SELF"], $myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysqli_fetch_array($result));
} else {
// no records to display
// 没有记录可显示
echo "对不起,没有找到记录!";
}
}
?>
注释:
- get传参,直接在网址后XXXX?id=?加就可以了2
- <a href=”链接地址”>文字</a>这一html标签表示链接。链接地址中第一个%s即第一个参数是当前页面的url,要用$_SERVER[‘PHP_SELF’]来表示,这一链接地址表示传递参数id即$myrow[‘id’]给当前的页面跳转到http://localhost/employees_search.php?id=$myrow[‘id’]这一界面,显示这一个id的记录。3
- mysqli_fetch_array()从返回的结果集中生成数组
- @表示如果没有接收id就当做没有这条语句,因此不会显示错误
三:一个可以对数据库进行操作的表单:
<html>
<body>
<?php
$PATH_INFO=$_SERVER["PHP_SELF"];
$db=mysqli_connect("localhost","root","******")or die(mysqli_connect_error());//连接失败则输出connect fail
mysqli_select_db($db,"my_db")or die(mysqli_error());
@$submit=$_POST['submit'];
@$first=$_POST['first'];
@$last=$_POST['last'];
@$address=$_POST['address'];
@$position=$_POST['position'];
@$delete=$_GET['delete'];//delete是get传参
@$id=$_GET['id'];//如果是点名字进入详细界面,id是get传参
if ($submit) //如果点击修改按钮
{
@$id=$_POST['id'];//点击按钮中是post传参,不是get了
// 如果没有ID,则我们是在增加记录,否则我们是在修改记录
if ($id)
{
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id"; //更新对于列表的数据
}
else
{
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";//插入新数据
}
// 向数据库发出SQL命令
$result = mysqli_query($db,$sql);
echo "记录修改成功!<p>";
}
elseif
($delete)//如果按了delete,跳转到新的页面,http://localhost/01/second-day-submitdata.php?id=4&delete=yes,delete的值为yes
{
// 删除一条记录
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysqli_query($db,$sql);
mysqli_query($db,"ALTER TABLE employees AUTO_INCREMENT = 1");
//加这句目的是对自增长id的重置,不然会id会跳过删除那一列
echo "记录删除成功!<p>";
} else {
// 如果我们还没有按submit按钮,那么执行下面这部分程序
if (!$id) {
// 如果不是修改状态,则显示员工列表
$result = mysqli_query($db,"SELECT * FROM employees");
while ($myrow = mysqli_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
//点击名字跳转到http://localhost/01/second-day-submitdata.php?id=3
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>", $PATH_INFO, $myrow["id"]);
//点击delete跳转http://localhost/01/second-day-submitdata.php?id=4&delete=yes
}
}
?>
<P>
<a href="<?php echo $PATH_INFO?>">ADD A RECORD</a><!--html注释符是这样,跳转回本页面,无参数-->
<P>
<form method="post" action="<?php echo $PATH_INFO?>"><!--post形式传参,action是发送的目的页面-->
<?php
if ($id) {
// 我们是在编辑修改状态,因些选择一条记录
//将框里的东西自动填入
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysqli_query($db,$sql);
$myrow = mysqli_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// 显示id,供用户编辑修改
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<!--id变成了是post传参,隐藏,id默认是当前的get的id,然后post走-->
<?php
}
?>
名:<input type="Text" name="first" value="<?php echo $first ?>"><br>
姓:<input type="Text" name="last" value="<?php echo $last ?>"><br>
住址:<input type="Text" name="address" value="<?php echo $address ?>"><br>
职位:<input type="Text" name="position" value="<?php echo $position ?>"><br>
<input type="Submit" name="submit" value="输入信息">
</form>
<?php
}
?>
</body>
</html>
这个东西还挺有意思的,结合html和php的知识
注释:
- 注意两次的id传参方式不一样,没按submit的是get传参,submit的是post传参2
- 整个程序的过程是:
- 这里将html和php结合放在一个文件中,而两部分的语法是不一样的
一:若无id参数,delete参数,未submit:显示从数据库获取的信息以及其对应的链接
二:有id,无delete,未submit则是跳转到对应每一个数据的详细信息
三:有id,delete=yes,未submit则是跳转到删除成功的页面,同时执行delete的sql语句
四:有id,无delete,submit则是修改页面,执行UPDATE的sql语句
五:无id,无delete,submit则是添加新的数据
4.因为id是自增长的,重复删除,新增会出现id记录次数而不是记录现有数据的情况,所以每一次删除要加ALTER TABLE employees AUTO_INCREMENT = 1,用来重置
暂时就这些,到时候忘了就看看