13.3. Database

简介:

使用pdo_mysql替代mysql

错误的写法,通过字符串链接拼接sql语句极容易出现注入漏洞

$sql = "select * from table where id=".$id;
$sql = "select * from table where id='".$id."'";
$sql = "INSERT INTO fruit(name, colour) VALUES ('".$name."', '".$colour."')";
		

正确的写法

$sql = "select * from table where id=?";
$sql = "INSERT INTO fruit(name, colour) VALUES (?, ?)";
		
		
$sql = <<<____SQL
     CREATE TABLE IF NOT EXISTS `ticket_hist` (
       `tid` int(11) NOT NULL,
       `trqform` varchar(40) NOT NULL,
       `trsform` varchar(40) NOT NULL,
       `tgen` datetime NOT NULL,
       `tterm` datetime,
       `tstatus` tinyint(1) NOT NULL
     ) ENGINE=ARCHIVE COMMENT='ticket archive';
____SQL;
		
		

13.3.1. 结果集使用注意事项

返回数据库查询结果有几种形式

数组形式

			
Array
(
    [0] => banana
    [1] => yellow
)

Array
(
    [NAME] => banana
    [COLOUR] => yellow
)
			
			

对象形式

Object
(
	Obj->NAME
	Obj->COLOUR
)
			

正确的使用方式

print($row[name])
print($row->name)
			

错误的使用使方式

print($row[0])
			

避免使用 "*"查询,一会影响性能,二增加带宽开销

$sql = "select * from tab where status=0 limit 1";
			

如果程序使用$row[1]读取结果,有可能当数据库结构改变,增加字段,字段顺序发生变化,输出数据都会出错

13.3.2. 索引

下面的例子,不会使用索引

$sql = "select id, name, created from tab where id != 100";
			
EXPLAIN select * from members where id != '1010';			索引失效
EXPLAIN select count(*) from members where id != '1010';	索引有效
			

13.3.3. 缓存

			

下面的例子,数据不会缓存查询结果

$sql = "select id, name, created from tab where created=now()";
			

Please enable JavaScript to view the &lt;a href="http://disqus.com/?ref_noscript"&gt;comments powered by Disqus.&lt;/a&gt;comments powered by Disqus




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

目录
相关文章
|
7月前
|
SQL Oracle 关系型数据库
Connect to Autonomous Database Using Oracle Database Tools
Connect to Autonomous Database Using Oracle Database Tools
64 1
|
数据库
GreenPlum ALTER DATABASE
alter database命令更改了数据库的属性。
109 0
|
数据库
Duplicating a Database
Duplicating a Database
200 0
Duplicating a Database
|
SQL 存储 运维
我们在讲的 Database Plus,到底能解决什么样的问题?
一直以来,大一统还是碎片化,是数据库发展趋势的两种最主流预测。随着数字化进程的推进,单一场景无法满足应用多样化的需求,数据库碎片化已呈不可逆的趋势。在当前,市场占有率最高的商用数据库—— Oracle 并没有明显短板的情况下,各种全新的数据库依旧如雨后春笋般层出不穷。如今,DB-Engines 上已有超过 300 余种数据库参与排名。
171 0
我们在讲的 Database Plus,到底能解决什么样的问题?
|
Java 关系型数据库 MySQL
database.propertise
数据库连接8一下
|
数据库 机器学习/深度学习 关系型数据库
|
关系型数据库 数据库 Oracle
12c:CREATE DATABASE——DBCA
界面1:Welcome     选择Create a Database,点击next 界面2:Step 2 of 14: Creation Mode     选择Advanced configuration,点击next 界面3:Step 3 of 14: Database Tem...
2065 0
|
关系型数据库 数据库管理 MySQL
|
关系型数据库 数据库 Oracle