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数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章