MYSQL数据库的操作

Posted 李昊宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL数据库的操作相关的知识,希望对你有一定的参考价值。

 

mysql的连接方式:

1.原生函数:mysql_connect($server,$username,$password);   //打开一个到Mysql服务器的连接

                 mysql_select_db($dbname);    //选择Mysql数据库

                 mysql_query();   //发送一条mysql查询

                 mysql_fetch_assoc();  //读取返回的资源,返回一个以字段为下标的数组,相当于mysql_fetch_array(\'\',MYSQL_ASSOC)

                 mysql_fetch_row();   //读取返回资源,数字数组,以数字为下标

                 mysql_fetch_array();    //读取返回资源,返回一个关联数组,也可是一个数字数组,或是两者兼有,如果加上第二个参数MYSQL_ASSOC,

                 mysql_num_rows();    //取得查询结果集总数

                 mysql_affected_rows();  // 判断操作是否成功,返回受影响的行数

                 mysql_insert_id();     //获取上一条insert操作的id

 1 <?php
 2 // 1,打开数据库连接
 3 // 2,选择要操作的数据库
 4 //$db=[
 5 //    \'server\'=>\'localhost:3306\',//ip   hostname:port mysql默认端口3306
 6 //    \'username\'=>\'root\',
 7 //    \'password\'=>\'123456\'
 8 //];// 数据库配置信息
 9 $db=include \'db_config.php\';
10 $con=@mysql_connect($db[\'server\'], $db[\'username\'], $db[\'password\']);
11 if (!$con){
12     echo "数据库连接失败:".  mysql_error($con);
13     exit;
14 }
15 mysql_select_db("my_blog");// 选择数据库
16 
17 $sql="select * from v_s_f";//返回全部数据
18 $result=mysql_query($sql,$con);// 发送一条sql,返回资源类型
19 //var_dump(mysql_fetch_array($result));// 返回数字下标和字段下标的一个数组
20 //echo \'<br>\';
21 $r=[];
22 while($row=mysql_fetch_assoc($result)){ //读取数据集合,一般使用assoc,返回以字段为下标的数组
23     $r[]=$row;
24 }
25 echo \'<br>\';
26 
27 $sql="select * from v_s_f where price=1";
28 $row=  mysql_query($sql,$con);
29 var_dump(mysql_fetch_row($row));// 读取一条数据
30 
31 $sql="update fruit set fruit_name=\'青苹果3\' where id=2"; 
32 $result=mysql_query($sql, $con);
33 $rows=  mysql_affected_rows();//更新操作是否成功,返回的是受影响的行数
34 if($rows){
35     echo "更新成功";
36 }else{
37     echo "更新失败";
38 }
39 
40 //$sql="insert into fruit(supplier_id,fruit_name,price) values (1,\'番茄\',4.4)";
41 //mysql_query($sql,$con);
42 //$id=mysql_insert_id();//获取上一条insert操作的主键id
43 //echo $id;
44 $sql="delete from fruit where id=13";
45 mysql_query($sql);
46 $rows=  mysql_affected_rows();//受影响的行数
47 if($rows>0){
48     echo "更新成功";
49 }else{
50     echo "更新失败";  
51 }

 2.使用mysqli连接数据库

new 一个连接对象,

对象名->query();  //发送一个sql语句,返回一个result类

$r[]=$row;   //把$row每次的结果存放在$r数组中

$result->fetch_assoc();  //读取返回的result类,返回一个以字段为下标的数组

对象名->prepare(sql语句);   //准备一条sql语句,返回stmt类,sql语句中的值可用?(通配符)表示,可以用在任何文字数据里,相当于一个模板。

bind_param("isd", $supplier_id,$fruit_name,$price);     //绑定参数,对应填充内容。字符串中的特殊字符会自动加上转义字符,防止sql注入

execute();    //执行sql

 1 <?php
 2 //使用mysqli或者是pdo来操作数据库
 3 $db=[
 4     \'host\'=>\'localhost\',
 5     \'user\'=>\'root\',
 6     \'password\'=>\'123456\',
 7     \'port\'=>\'3306\',
 8     \'db_name\'=>\'my_blog\'
 9 ];
10 // mysqli 是PHP的一个扩展,面向对象
11 try {
12     $con=new mysqli($db[\'host\'], $db[\'user\'], $db[\'password\'], $db[\'db_name\'], $db[\'port\']);
13     
14     $sql="select * from v_s_f";//返回数据集合,是一个列表
15     $result=$con->query($sql);// 返回的是mysqli_result类
16     if(!$result){
17         echo "查询失败";
18         exit;
19     }
20     while($row=$result->fetch_assoc()){
21         $r[]=$row;
22     }
23     echo \'<br>\';
24 //    var_dump($r);
25     echo \'<br>\';
26     $sql="select * from v_s_f where price=1";
27     $result=$con->query($sql);
28     $row=$result->fetch_row();//处理单条数据
29 //    print_r($row);
30     
31     $sql="insert into fruit(supplier_id,fruit_name,price) values (1,\'山楂\',1.2)";
32 //    $result=$con->query($sql);
33     if(!$result){
34         echo "插入失败";
35         exit;
36     }
37 //    $id=$con->insert_id;
38 //    echo $id;
39     
40     $sql="update fruit set fruit_name=\'葡萄\' where price=1";
41     $result=$con->query($sql);
42     if(!$result){
43         echo "更新失败";exit;
44     }
45 //    echo $con->affected_rows;//受影响的行
46     
47 //    $smt=$con->prepare("insert into fruit (supplier_id,fruit_name,price) values (?,?,?)");//准备一个sql,返回的是mysqli_stmt类 i-int s-string d-double
48 //?号是通配符,可以用在任何有文字的数据里,相当于是一个模板
49 //    $supplier_id=2;
50 //    $fruit_name=\'葡萄柚\';
51 //    $price=2.3;
52 //    $smt->bind_param("isd", $supplier_id,$fruit_name,$price);//绑定参数,对应填充内容。字符串中的特殊字符会自动加上转义字符,防止sql注入
53 //    $smt->execute();//执行sql
54 //    echo "插入的数据:".$smt->insert_id;
55 //    echo "<br>";
56     
57     $smt1=$con->prepare("select fruit_name,price from fruit");
58     $smt1->execute();
59     $smt1->bind_result($fruit_name,$price);//绑定的名字可以随意写
60     while ($smt1->fetch()){
61         echo $fruit_name.\'价格:\'.$price."<br>";
62     }   
63 }catch(Exception $ex){
64     echo "error:".$con->connect_error;
65 }

 

 

3.使用pdo连接:

PDO->php data object

pdo是PHP的一个扩展类,

 

 1 <?php
 2 //PDO连接数据库
 3 $dsn="mysql:dbname=my_blog;host=127.0.0.1";//dbname和host顺序可变
 4 $username="root";
 5 $password="123456";
 6 try {
 7     $pdo=new PDO($dsn, $username, $password);
 8 } catch (PDOException $ex) {//抛出错误信息$ex
 9     echo "Error:".$ex->getMessage();//异常错误信息用getmessage()抛出
10 }
11 $sql="select * from v_s_f";//返回一个列表
12 $result=$pdo->query($sql);//返回一个pdo statement object,一个对象
13 if($result===false){
14     echo "查询失败";
15     exit;
16 }
17 $rows=$result->fetchAll(PDO::FETCH_ASSOC);//返回以字段为下标的数组,双冒号代表后面的值是一个常量,fetchall读取的是列表
18 print_r($rows);
19 $sql="select * from fruit where price=1";
20 $result=$pdo->query($sql);//查询使用query
21 $row=$result->fetch(PDO::FETCH_ASSOC);//读取一条数据使用fetch,读取列表使用fetchall
22 print_r($row);
23 $sql="update fruit set fruit_name=\'葡萄柚\' where id=4";
24 $num=$pdo->exec($sql);//exec()返回的是受影响的行数
25 echo $num;
26 
27 $sql="delete from fruit where id=4";
28 $num= $pdo->exec($sql);
29 echo "删除的行数:".$num;
30 
31 $sql="insert into fruit(supplier_id,fruit_name,price) values (2,\'香蕉梨\',3.4)";
32 $num=$pdo->exec($sql);
33 $id=$pdo->lastInsertId();//返回最后一次插入行的id
34 echo "插入行数:".$num."返回id".$id;
35 
36 $stm=$pdo->prepare("delete from fruit where id=:id");//:id 也可以写成?号
37 $id=4;
38 $stm->bindParam(":id", $id, PDO::PARAM_INT);
39 //$stm=$pdo->prepare("delete from fruit where id=?");
40 //$stm->bindParam(1, $id, PDO::PARAM_INT);//1是下标
41 $stm->execute();
42 echo "删除行数".$stm->rowCount();//返回受影响的行数

 

这是一个数据库的操作类:

  1 <?php
  2 //数据库操作类,
  3 class Model{
  4     private $pdo;
  5     public $table;//代表要操作的表
  6     static $m=1;
  7     public function __construct() {
  8         try {
  9             $this->pdo=new PDO("mysql:dbname=my_blog;host=localhost", "root", "123456");//,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
 10         } catch (PDOException $ex) {
 11             echo "Exception:".$ex->getMessage();//getMessage()获取异常的方法
 12         }//出现异常会抛出,catch会抓取异常信息exception
 13     }
 14     public static function test(){
 15         return self::test1();//调用静态方法用self::
 16     }
 17     public static function test1(){
 18         return self::$m;
 19     }
 20     //获取数据列表
 21     public function getList($sql){
 22         $stm=$this->pdo->query($sql);//pdostatement对象
 23         return $stm->fetchAll(PDO::FETCH_ASSOC);
 24     }
 25     //添加数据  supplier_id=2,fruit_name=\'\' ,price=\'\'
 26     public function insertData($data){//$data必须是一个数组
 27         if(!is_array($data)){
 28             return false;
 29         }
 30         $fileds_arr=array_keys($data);
 31         $fileds_val=  array_values($data);
 32 //        $val=  implode(\',\', $fileds_val);
 33         $fileds=implode(\',\', $fileds_arr);
 34         $fileds_len=count($fileds_arr);//获取字段的个数
 35         $i=1;
 36         $val="\'{$data[$fileds_arr[0]]}\'";//组合成values(1,2,3)
 37         while($i<$fileds_len){
 38             $val.=",\'{$data[$fileds_arr[$i]]}\'";
 39             $i++;
 40         }
 41         $sql="insert into ".$this->table." ($fileds) values ($val)";//sql语句都是组合出来的
 42 //        echo $sql;
 43         return $this->pdo->exec($sql);//返回受影响的行数,带有执行的功能
 44     }
 45     public function del($data){
 46         if(!is_array($data)){
 47             return FALSE;
 48         }
 49         $fileds_arr=array_keys($data);
 50         $len=  count($fileds_arr);
 51         $i=0;
 52         $where="1=1";//1=1 and n=2 and m=3
 53         while($i<$len){
 54             $where.=" and $fileds_arr[$i]=\'".$data[$fileds_arr[$i]]."\'";
 55             $i++;
 56         }
 57         $sql="delete from ".$this->table." where ".$where;//delete from fruit where 1=1 and fruit_name=\'11\'
 58         echo $sql;
 59         return $this->pdo->exec($sql);
 60     }
 61     public function updateData($data,$condition){
 62         if(!is_array($data) || !is_array($condition)){
 63             return false;
 64         }
 65         $condition_fileds=array_keys($condition);
 66         $i=0;
 67         $where="";
 68         $len=count($condition_fileds);
 69         while($i<$len){
 70             if($i==0){
 71                 $where.="$condition_fileds[$i]=\'".$condition[$condition_fileds[$i]]."\'";
 72             }else{
 73                 $where.=" and $condition_fileds[$i]=\'".$condition[$condition_fileds[$i]]."\'";
 74             }
 75             $i++;
 76         }
 77         $data_a=  array_keys($data);
 78         $i=0;
 79         $str="";
 80         $len=  count($data_a);
 81         while($i<$len){
 82             if($i==0){
 83                 $str.="$data_a[$i]=\'".$data[$data_a[$i]]."\'";
 84             }else{
 85                 $str.=", $data_a[$i]=\'".$data[$data_a[$i]]."\'";
 86             }
 87             $i++;
 88         }
 89         $sql="update ".$this->table." set ".$str." where ".$where;
 90         return $this->pdo->exec($sql);
 91     }
 92     public function select($fileds="",$condition=array()){
 93         if(empty($fileds)){//没有传字段的情况下查询的是所有字段
 94             $fileds="*";
 95         }
 96         $where="";
 97         if(!empty($condition) && is_array($condition)){
 98             $keys=  array_keys($condition);
 99             $i=0;
100             $where=" where 1=1";
101             $len=  count($keys);
102             while($i<$len){
103                 $where.= " and $keys[$i]=\'".$condition[$keys[$i]]."\'";
104                 $i++;
105             }
106         }
107         $sql="select ".$fileds." from ".$this->table.$where;
108         $result=  $this->pdo->query($sql);
109         $row=$result->fetchall(PDO::FETCH_ASSOC);
110         echo "<pre>";
111         print_r($row);
112     }
113 }
114 
115 
116 
117 //$m=new Model();
118 //$data=[
119 //    \'supplier_id\'=>1,
120 //    \'fruit_name\'=>\'红苹果\',
121 //    \'price\'=>3.2
122 //];
123 //$condition=[\'price\'=>3.2];
124 //$fileds="fruit_name,price";
125 //$m->table="fruit";
126 ////$m->insertData($data);
127 ////$m->del($data);
128 ////echo $m->updateData($data, $condition);
129 //$m->select($fileds,$condition);

 

 

 

启动Mysql的四种方式:

1.bitnami;

2.任务管理器->服务->wampstactmysql;

3.进程中通过mysqld.exe可以关闭MySQL; 

4.通过运行->cmd->net stop/start wampstackmysql 关闭/打开;

 

命令行操作数据库:

命令行连接数据库的方法:

mysql>create database 数据库名称       //创建数据库

mysql>show create database 数据库名称        //展示内容

mysql>drop database 数据库名称        //删除数据库

mysql>use 数据库名称      //use用在cmd中表示选中要操作的数据库

mysql>select * from 表名;    

mysql>show engines\\G;    //列出支持的存储引擎(不同表之间的存储引擎可以不同)。\\G是以列的方式排列(仅在cmd中)

存储引擎:

innerDB  事务型数据库首选引擎,支持事务操作,不支持全文索引

MyISAM  不支持事务操作,支持全文索引

事务:为了保证数据的统一性,正确性。是用户定义的一个操作过程,要么全部操作,要么都不做(若果出现错误,会收到一个返回值,然后判断是否回滚rollback);

事务的使用:1,开启事务mysql>start transaction

                 2,插入数据/删除数据

                     insert into 表名(username,password) valuse (22,333);

                     delete from 表名 where id=3;

                  3,如果有错误,rollback;  回滚,撤销上面插入/删除的值。同时也有关闭事务的功能;

                  4,commit操作,保存数据到数据库,关闭事务,只有开始事务的时候才会使用commit。

            注意:commit之前的操作对数据库没有任何影响,一直是在内存中进行的,只有使用commit之后才会对数据库中的数据残生影响

show variables like \'storage_engine\';     查看默认的存储引擎(命令行查看)

Navicat中是通过邮件->设计表查看。

 

Navicat操作数据库:

打开Navicat->连接->mysql

Mysql函数:select version();  查看当前Mysql的版本号

                 select username;    查看当前用户名

                 select last_insert_id();  获取最后一个自动生成的id

 

修改数据库root用户的登录的密码:两

以上是关于MYSQL数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中填充列表视图?

MySQL触发器

MySql触发器使用

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程