在进行SQL注入原理的剖析的时候,对MySQL数据库掌握薄弱,参照菜鸟教程的MySQL教程速刷一遍MySQL

关于MySQL

MySQL是最流行的关系型数据库管理系统,在WEB方面MySQL是最好的RDBMS应用软件之一。(RDBMS Relational Database Mangagement System:关系数据库管理软件)

什么是数据库、关键词等……

……(拒绝无意义的复制粘贴,传送门

PHP脚本操作数据库用法

连接MySQL

使用mysqli_connect()函数来连接数据库;

mysqli_connect(host, username, password, dbname, port, socket)

参数 描述
host 可选。主机名或ip地址
username 可选。MySQL用户名
password 可选。MySQL密码
dbname 可选。使用的数据库
port 可选。尝试连接到MySQL服务器的端口号
socket 可选。规定socket或要使用的已命名的pipe

使用mysqli_close()函数可以断开与MySQL数据库的链接,但一般并不需要,因为已打开的非持久连接会在脚本执行完毕后自动关闭。

<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '数据库连接成功!';
mysqli_close($conn);
?>

创建数据库

CREATE DATABASE 数据库名;

在PHP脚本中使用mysqli_query()函数来创建或删除数据库;

mysqli_query(connection, query, resultmode);

参数 描述
connection 必需。规定要使用的MySQL连接
query 必需。规定要查询的字符串
resultmode 可选。一个常量,可以为:MYSQLI_USE_RESULT(如果需要检索大量数据,使用这个)MYSQLI_STORE_RESULT(默认)

创建数据库实例:

<?php
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!'; $sql = 'CREATE DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('Failing to create databse!').mysqli_error($conn);
}
echo "<br>Successfully to create the database<br>"; mysqli_close($conn); ?>

发现在数据库的名字是部分大小写的,一律小写,创建时的语句是大写,查看的时候发现数据库的名字都是小写。

删除数据库

在在MySQL的命令行下,使用drop命令

drop database <数据库名>

类同,在PHP脚本中,主要还是通过前面介绍过的mysqli_query()函数来执行一个SQL语句。

所以我们可以这样......

<?php
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!'; $sql = 'DROP DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('Failing to DROP databse!').mysqli_error($conn);
}
echo "<br>Successfully to DROP the database<br>"; mysqli_close($conn); ?>
选择数据库

当我们有很多数据库需要管理的时候,面临复杂的业务时,来回切换数据库必不可少。

在命令行中,一条命令use 数据库名称便可以切换数据库,此时……我看到了一句话……

注意:所有的数据库名,表名,表字段都是区分大小写的。所以你在使用SQL命令时需要输入正确的名称。

哦??真的这么尴尬?我决定亲自试一试,首先我使用CREATE DATABASE RUNOOB成功创建了一个数据库,接着,我又使用语句CREATE DATABASE RuNOOB,结果创建失败,这间接证明了我前面数据库名不区分大小写的说法,但是黑体的说法真的错误码?其实不然,我查阅了一些资料后,得出如下结论:

  • MySQL在Linux下,数据库名、表名、列名、别名大小写规则是这样的:

    • 数据库名、表名、表的别名、变量名 严格区分大小写
    • 列名、列的别名在所有情况下均是忽略大小写
  • MySQL在Windows下都不区分大小写

当然,都不是一成不变的,在Linux下,消除大小写敏感通过修改配置文件/etc/my.cnf,添加lower_case_table_names = 1;Windows中,可以在MySQL配置文件中my.ini添加。参数0表示区分大小写,参数1表示不区分大小写。参考文章1

参考文章2

所以……我们到哪了?哦,选择数据库,继续;

PHP脚本使用函数mysqli_select_db()来选取一个数据库。函数成功执行后返回TRUE,否则返回FALSE;

mysqli_select_db(connection, dbname);

参数 描述
connection 必需。规定要使用的MySQL连接
dbname 必需。规定要使用的数据库
创建数据表

创建数据表需要的信息有:

  • 表名
  • 表字段名
  • 定义每个表字段

语法:CREATE TABLE table_name (column_name column_type);

用PHP脚本创建数据表:

依旧mysqli_query()函数,执行成功返回TRUE,失败返回FALSE

,忘了吗?它是三个参数的哈,忘记的话向上翻一翻。

其中必选参数第二个query代表是我们的主要功能实现部分,SQL语句,若要全面介绍SQL语言就可以另外开启一篇了。

删除数据表

删除操作是很危险的,删除了数据库,库中的信息会全部丢失,同样,删除了数据表,表中的数据也会全部丢失。

语法:DROP TABLE table_name ;

在PHP脚本中,使用mysqli_query()函数

补充:

  • 删除表内数据,用delete

    DELETE FROM 表名 WHERE 删除条件;
  • 清除表内数据,保留表的结构,用truncate

    TRUNCATE TABLE 表名;
插入数据

语法:

INSERT INTO table_name (field1, field2, ... fieldN)
VALUES
(value1, value2, ... valueN);

如果数据是字符型,必须使用单引号或双引号,如"value"

从环境中拷出来我作为测试成功的代码:

<?php
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!';
/*Above is about if successfully connecting to the database*/
mysqli_query($conn,"set names utf8"); $runoob_name = 'blackcat';
$runoob_id = 1;
$runoob_time = '2019-6-1'; $sql = "INSERT INTO runoob_tb1 (id,name,dates) VALUES ".
"('$runoob_id','$runoob_name','$runoob_time')"; mysqli_select_db($conn,'RUNOOB'); $retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('<br>Failing to do').mysqli_error($conn); }
echo "<br>Successfully to do<br>"; mysqli_close($conn); ?>

当然这是有前提的,在INSERT语句中,VALUES前的小括号中是字段名,也就是每一列的名字,VALUES后为我们插入的数据,这与它们的类型数量等是相对应的,只是这里埋个坑:VALUES句后面的三个变量名,为什么要用单引号括起来?

查询数据

语法:

SELECT column_name, column_name
FROM table_name
[WHERE Clause]
[ LIMIT N ] [ OFFSET M ]
  • 查询语句可以使用一个或多个表,使用逗号(,)分隔;
  • SELECT命令可以读取一条或多条记录
  • 可以使用通配符星号(*)来代替其他字段,
  • WHERE用来设定查询条件,可以包含任何条件
  • 使用LIMIT 来设定返回的记录数
  • 使用OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0

查询数据成功后,使用PHP函数mysqli_fetch_array()配合第二个参数MYSQLI_ASSOC设置该参数查询结果返回关联数组,另一个函数mysqli_fetch_assoc()该函数从结果集中取得一行作为关联数组。返回根据从结果集取得的生成的关联数组,如果没有多行,返回false。

通俗地讲就是利用这个函数可以将查询的结果的一行返回为一个数组,索引为字段名,当函数mysqli_fetch_array()的第二个参数为MYSQLI_NUM时,返回数字数组,利用数字索引获取记录内容。

MySQL学习笔记(上)的更多相关文章

  1. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  2. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  3. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  4. MySQL学习笔记-锁相关话题

    在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因.   Mysql常用存储引擎的锁 ...

  5. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  6. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  7. MySQL学习笔记-cache 与 buffer

    Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而 buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出的数据,后者是解决写 ...

  8. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  9. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  10. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

随机推荐

  1. CTF各种资源:题目、工具、资料

    目录 题目汇总 Reverse 签到题 Web Web中等难度 Crypto 基础网站 各类工具 综合 Web Payloads 逆向 Pwn 取证 题目汇总 这里收集了我做过的CTF题目 Rever ...

  2. eclipse多个项目提交到同一个仓库(码云)

    参考博客:Eclipse提交多个项目到同一个仓库 https://blog.csdn.net/qq_30764991/article/details/80379365 步骤一:码云建立个远程仓库 步骤 ...

  3. <转>ThinkPHP的开发常用系统配置项

    /* 项目设定 */ ’APP_DEBUG’ => false, // 是否开启调试模式 ’APP_DOMAIN_DEPLOY’ => false, // 是否使用独立域名部署项目 ’AP ...

  4. python碎片化 - 集合set

    集合set:无序,不重复的数据类型 list1={1,2,3,4,5} list2={6,5,4,7,8,9,} list3={1,2,3} s = set([3,5,9,10]) #交集 print ...

  5. 题解 P1587 【[NOI2016]循环之美】

    知识点:莫比乌斯反演 积性函数 杜教筛 废话前言: 我是古明地恋,写这篇题解的人已经被我 请各位读者自行无视搞事的恋恋带有删除线的内容,谢谢茄子. 这道题目本身并不难,但是公式推导/代码过程中具有迷惑 ...

  6. Sql server时间转时间long

    DATEDIFF( S, '1970-01-01 00:00:00', a.endor_date ) - 8 * 60*60 ) actionTime, SELECT DATEADD(S,116070 ...

  7. mysql BETWEEN操作符 语法

    mysql BETWEEN操作符 语法 作用:选取介于两个值之间的数据范围.这些值可以是数值.文本或者日期.大理石平台 语法:SELECT column_name(s) FROM table_name ...

  8. WEB上传一个文件夹

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  9. luogu P1028 数的计算 x

    P1028 数的计算 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它 ...

  10. android中使用Application

    在android开发过程中,我们可能存储一些全局的变量,最好在正在app的任何一个activity或者service中都可以访问到,这时我们可以使用application. 我们的一个应用就叫appl ...