php学习笔记5.md
- Exception类
- getCode() – 返回传递给构造函数的代码
- getMessage(), 返回传递给构造函数的消息
- getFile().返回产生异常代码的文件的完整路径
- getLine()返回代码文件中产生异常的代码行号
- getTrace() 返回一个包含了产生异常的代码回退路径的数组
- _tostring()–允许简单的显示一个Exception对象,并且给出以上所有方法可以提供的信息。
- php连接数据库
@ $db = new mysqli('localhost', 'root', 'root', 'php_mysql');
if (mysqli_connect_errno()) { //该函数会在出现连接错误时返回一个错误号
echo 'Error: Could not connect to database. Please try again later.';
exit;
}
mysqli_select_db(dbName);//选择使用哪个数据库,如果在建立数据库连接时已经选定数据库,可省去该步骤
$result = $db->query($query);//执行查询
$num_results = $result->num_rows;//统计所返回记录行的行数 也可以使用mysqli_num_rows($result)查询返回的行数
$row = $result->fetch_assoc();返回下一行数据
$row['isbn']获取改行的标签为isbn的数据
stripslashes($row['isbn']);去除数据中的斜杠
$row = $result->fetch_row($result);//此时可以使用$row[0],$row[1]...来获取值
$row = $result->fetch_object();//将一行的数据取到一个对象中
$db->affected_rows 在执行插入和删除时,使用该结果的值来判断是否执行成功
//Prepared语句
$query = "insert into books values(?,?,?,?)";
$stmt = $db->prepared($query);
$stmt->bind_param(‘sssd',$va1,$var2,$var3,$var4);//前面的sssd代表的是第一、二、三个参数时string,第四个参数时double类型,常用的还有b代表blob,i表示整数。在进行查询操作时可使用$stmt->bind_result($isbn,$author,$title,$price)函数进行结果绑定。
$stmt->execute();
$result->free()//释放结果集
$db->close()//关闭数据库连接
- 数据库的优化
- 设计优化
尽可能的让null最少,使主键最短,最小的列数据类型。(最小化冗余的设计思想)
简化权限。 - 表的优化
如果一个表已经用了很长时间了,随着更新和删除操作的发生,数据会变得支离破碎,这时同样会增加在该表中查询所话的时间。可使用optimize table tablename;来进行修复。 - 使用索引
在需要提高查询速度的地方使用索引,简化索引,不要创建不使用的索引。 - 使用默认值
在尽可能的地方使用列的默认值,在在与默认值不同的时候才插入数据,这样可以减少insert语句所花的时间。
- 数据库的备份
- Lock tables;在执行备份之前,必须执行Flush tables;来确保对索引所做的任何修改写入磁盘。
- mysqldump --opt --all-databases > all.sql;将所有用来重新构建一个SQL数据库所需的内容都导出到一个名叫all.sql的文件中。
- mysqlhotcopy database /path/for/backup
- 存储过程
delimiter //
CREATE PROCEDURE total_orders (out total float)
BEGIN
SELECT sum(amount) into total from orders;
END
//
delimiter;
-- 调用存储过程
call total_orders(@t)
- mysql 函数
delimiter //
CREATE FUNCTION add_tax (price float) RETURNS FLOAT
RETURN price * 1.1;
//
delimiter ;
-- 调用函数
select add_tex(100);
-- 声明变量
declare tax float default 0.10
- mysql 游标和句柄的使用
delimiter //
CREATE PROCEDURE largest_order(out largest_id int)
BEGIN
DECLARE this_is int;
DECLARE this_amount float;
DECLARE l_amount float DEFAULT 0.0;
DECLARE l_id int;
DECLARE done INT DEFAULT 0;
DECLARE continue HANDLER for SQLSTATE '0200' set done =1;
DECLARE c1 CURSOR for SELECT orderid, amount from orders;
open c1;
REPEAT
FETCH c1 INTO this_id, this_amount;
if NOT done THEN
if this_amount > l_amount THEN
SET l_amount = this_amount;
SET l_id = this_id;
end if;
end IF;
UNTIL done end REPEAT;
CLOSE c1;
set largest_id = l_id;
END
//
delimiter;