php与mysql的操作(三日通)

要做开发性实验,以下是基于三日通的一二天关于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);

注释:

  1. mysqli_error可以输出与数据库各种操作语句的错误id那如果DEFAULT '0' NOT NULL  AUTO_INCREMENT会报错,原因是id的默认值和自增长冲突,所以要删掉其中一个
  2. 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 "对不起,没有找到记录!"; 
    }
}
?>

注释:

  1. get传参,直接在网址后XXXX?id=?加就可以了2
  2. <a href=”链接地址”>文字</a>这一html标签表示链接。链接地址中第一个%s即第一个参数是当前页面的url,要用$_SERVER[‘PHP_SELF’]来表示,这一链接地址表示传递参数id即$myrow[‘id’]给当前的页面跳转到http://localhost/employees_search.php?id=$myrow[‘id’]这一界面,显示这一个id的记录。3
  3. mysqli_fetch_array()从返回的结果集中生成数组
  4. @表示如果没有接收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的知识

注释:

  1. 注意两次的id传参方式不一样,没按submit的是get传参,submit的是post传参2
  2. 整个程序的过程是:
  3. 这里将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,用来重置

暂时就这些,到时候忘了就看看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值