MySQL数据查询
mysql数据查询语句是select语句,可以进行各种各样的查询,以满足用户的查询需求。
user表结构:
| 字段名 | 数据类型 | 约束 | 字段说明 |
|---|---|---|---|
| id | int | auto_increment primary key | 编号 |
| username | varchar(200) | not null | 姓名 |
| password | varchar(200) | not null | 密码 |
| gold | int | default 100 | 金币 |
普通查询语法格式:
select * from 表名;
select 字段1,字段2…from 表名;
select * from 表名 where 条件;
where关键字注意:
1.where关键字可以使用比较运算符指定任何条件。
2.where条件可以是一个,也可以是多个,这些条件可以用逻辑运算符连接。
MySQL比较运算符:
| 比较运算符 | 说明 |
|---|---|
| = | 等于,检测两个值是否相等,如果相等则返回true |
| <>、!= | 不等于,检测两个值是否不相等,如果不相等则返回true |
| < | 小于,检测左边的值是否小于右边的值,如果小于则返回true |
| <= | 小于或等于,检测左边的值是否小于或等于右边的值,如果小于或等于则返回true |
| > | 大于,检测左边的值是否大于右边的值,如果大于则返回true |
| >= | 大于或等于,检测左边的值是否大于或等于右边的值,如果大于或等于则返回true |
MySQL逻辑运算符:
| 逻辑运算符 | 说明 |
|---|---|
| and | 表示多个条件都必须满足 |
| or | 表示满足任意条件就可以 |
条件查询:
select * from user where username = ‘张三’ and password = ‘123456’;
PDO执行select语句
在PHP中,想要对MySQL执行查询操作,可以通过PDO的query()方法来实现。query()方法不同于exec()方法,它通常用于执行SELECT语句,返回值是PDOStatement实例。
说法格式:
PDOStatement PDO::query(String sql)
<?phpheader("content-type:text/html;charset = utf-8");$url = "mysql:host=127.0.0.1;dbname = "cai";$user = "root";$pwd = "123";$conn = new PDO($url,$user,$pwd);$st = $conn->query("select * from user");//通过pdo的query方法,执行查询语句,返回值 为PDOStatement实例print_r($st);
在PDO中,使用fetchALL()方法可以返回一个包含结果集中所有行的二维数组。
语法格式:
array PDOStatement::fetchAll([ int $fetch_style[ , mixed $fetch_argument[ , array $ctor_args ] ] ] )
<?phpheader("content-type:text/html;charset=utf-8");$url = "mysql:host=127.0.0.1;dbname=cai";$user = "root";$pwd = "123";$conn = new PDO($url,$user,$pwd);$st = $conn->query("select * from user");$rs = $st->fetchAll();//通过PDO实例,调用fetchAll()方法,获得查询结果集中所有数据echo "<pre>";print_r($rs);echo "</pre>";
在pdo中,使用fetch()方法可以从结果认可中获取一条指定的记录,返回值为一维数组。
sql注入
SQL 注入是指攻击者篡改程序中的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来欺骗数据库服务器执行非授权的任意查询语句,从而进一步得到相应的数据信息。
SQL 注入最常出现在 “会员登陆” 功能中。例如,某用户在网站中执行登陆操作时,程序将会执行如下 SQL 语句:
select * from 用户表 where username=’用户名’ and password=’密码’
当用户输入正确的用户名、密码时,该语句将会查询到相应记录,则表示会员登陆成功。
示例:
select * from user where username=’张三’ and password=’123456’;
恶意的:
select * from user where username=’’ or 1=1;#’ and password=’’;
为了防止这种漏洞我们有了预处理
PDO预处理
使用预处理语句,可以确保不会发生 SQL 注入的问题。在 PDO 中,可以使用 prepare() 方法来实现预处理语句,返回值是 PDOStatement 实例。
语法格式:
PDOStatement PDO::prepare( String sql );
<?phpheader("content-type:text/html;charset=utf-8");$userName = "张三";$password = "123456";//连接数据库$url = "mysql:host=127.0.0.1;dbname=cai";$user = "root";$pwd = "123";$conn = new PDO($url,$user,$pwd);//预处理$st = $conn->prepare("select * from user where username=? and password=?");$st->bindParam(1,$userName);$st->bindParam(2,$password);$st->execute();//获得结果集$rs = $st->fetch();echo "<pre>";var_dump($rs);echo "</pre>";
1、指定将要执行的 SQL 语句
$st = $conn->prepare(“select from user where username=? and password=?”);
通过 PDO 的 prepare() 方法,指定将要执行的 SQL 语句,返回值为 PDOStatement 实例。
*问号?:SQL 语句中的问号,表示占位符,后面将会为其绑定具体的参数值。
2、占位符绑定参数
$st->bindParam(1,$userName);
$st->bindParam(2,$password);
通过 bindParam() 方法,为 SQL 语句中的问号(占位符),绑定具体的参数值。
数字1:表示 SQL 语句中的第 1 个占位符,也就是 username 字段的值。
$userName:将 $userName 变量值,绑定到 SQL 语句中的第 1 个占位符。
数字2:表示 SQL 语句中的第 2 个占位符,也就是 password 字段的值。
$password:将 $password 变量值,绑定到 SQL 语句中的第 2 个占位符。
3、执行预处理语句
$st->execute();
通过 execute() 方法,执行预处理语句。
