php笔记(9)——数据库操作与mysqli扩展
2016-05-29 15:06
741 查看
数据库扩展
查询
插入
更新与删除
关闭连接
验证mysqli扩展是否开启
查询
单条查询语句
多条查询语句
增删改
预处理语句
使用预处理执行插入
使用预处理语句查询
使用预处理语句防止sql注入
事务处理
mysql扩展进行数据库连接的方法:(该库已不推荐使用)
mysqli扩展:
PDO扩展
可以通过设定参数MYSQL_NUM只获取数字索引数组,等同于mysql_fetch_row函数,如果设定参数为MYSQL_ASSOC则只获取关联索引数组,等同于mysql_fetch_assoc函数。
遍历查询结果
如果主键id自增长,可以获取插入的id,可用于判断是否插入成功等。
同样的删除可以使用类似以下的代码:
对于删除与更新操作,可以通过mysql_affected_rows函数来获取更新过的数据行数,如果数据没有变化,则结果为0。
并且,增删改也支持多条语句执行。
当执行多条sql语句时,只要第一条执行成功,就返回true。如果其中一条执行出异常,那么前面的语句正常执行,后面的语句将不再执行。
插入示例代码:
查询
插入
更新与删除
关闭连接
验证mysqli扩展是否开启
查询
单条查询语句
多条查询语句
增删改
预处理语句
使用预处理执行插入
使用预处理语句查询
使用预处理语句防止sql注入
事务处理
数据库扩展
Mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行连接与操作。mysql扩展进行数据库连接的方法:(该库已不推荐使用)
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
mysqli扩展:
$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');
PDO扩展
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; $dbh = new PDO($dsn, $user, $password);
查询
$link = mysqli_connect('localhost','root',''); mysqli_select_db($link,'test'); $res = mysqli_query($link,'select * from user'); $row = mysqli_fetch_array($res); var_dump($row);
可以通过设定参数MYSQL_NUM只获取数字索引数组,等同于mysql_fetch_row函数,如果设定参数为MYSQL_ASSOC则只获取关联索引数组,等同于mysql_fetch_assoc函数。
$row = mysql_fetch_row($result); $row = mysql_fetch_array($result, MYSQL_NUM); //这两个方法获取的数据是一样的 $row = mysql_fetch_assoc($result); $row = mysql_fetch_array($result, MYSQL_ASSOC);
遍历查询结果
while($row = mysqli_fetch_array($res)){ var_dump($row); }
插入
$link = mysqli_connect('localhost','root',''); mysqli_select_db($link,'test'); $sql = "insert into user(id, name) values('3','jane')"; mysqli_query($link,$sql);
如果主键id自增长,可以获取插入的id,可用于判断是否插入成功等。
$link = mysqli_connect('localhost','root',''); mysqli_select_db($link,'test'); $sql = "insert into user( name) values('jjj')"; mysqli_query($link,$sql); $uid = mysqli_insert_id($link); echo $uid;
更新与删除
数据的更新与删除相对比较简单,只需要构建好相应的sql语句,然后调用mysql_query执行就能完成相应的更新与删除操作。$sql = "update user set name = '曹操' where id=2 limit 1"; if (mysqli_query($sql)) { echo '更新成功'; }
同样的删除可以使用类似以下的代码:
$sql = "delete from user where id=2 limit 1"; if (mysqli_query($sql)) { echo '删除成功'; }
对于删除与更新操作,可以通过mysql_affected_rows函数来获取更新过的数据行数,如果数据没有变化,则结果为0。
$sql = "update user set name = '曹操' where id=2 limit 1"; if (mysqli_query($sql)) { echo mysqli_affected_rows(); }
关闭连接
$mysqli_close($link);
验证mysqli扩展是否开启
有以下四种方式:phpinfo(); var_dump(extension_loaded("mysqli")); var_dump(function_exists("mysqli_connect")); print_r(get_loaded_extensions());
查询
单条查询语句
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $sql = "select * from user"; $result = $mysqli->query($sql); var_dump($result->fetch_all());
多条查询语句
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $sql = "select * from user;"; $sql .= "select * from user;"; if($mysqli->multi_query($sql)){ do{ if($result = $mysqli->store_result()){ var_dump($result->fetch_all()); } }while($mysqli->more_results() && $mysqli->next_result());//使用next_result()将指针移向第二条查询语句的结果集 }
增删改
增删改的操作和查询一样,只是sql语句不同而已。并且,增删改也支持多条语句执行。
当执行多条sql语句时,只要第一条执行成功,就返回true。如果其中一条执行出异常,那么前面的语句正常执行,后面的语句将不再执行。
插入示例代码:
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $name = 'zhoujun'; $sql = "insert into user(name) values('{$name}')"; $mysqli->query($sql); echo $mysqli->insert_id;
预处理语句
使用预处理执行插入
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $sql = "insert into user(name) values(?)"; $mysqli_stmt = $mysqli->prepare($sql); $name = "name"; //第一个参数指定数据类型,i表示整形,s表示字符型,d表示浮点型, //例如isd表示插入语句中第一个占位符是整形,第二个第三个是字符串和浮点 $mysqli_stmt->bind_param('s',$name); if($mysqli_stmt->execute()){ echo $mysqli->insert_id; }else{ echo $mysqli->error; }
使用预处理语句查询
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $sql = "select * from user where id>?"; $mysqli_stmt = $mysqli->prepare($sql); $id = 2; //第一个参数指定数据类型,i表示整形,s表示字符型,d表示浮点型, //例如isd表示插入语句中第一个占位符是整形,第二个第三个是字符串和浮点 $mysqli_stmt->bind_param('i',$id); if($mysqli_stmt->execute()){ $mysqli_stmt->bind_result($id,$name);//将查询结果绑定到变量 while($mysqli_stmt->fetch()){ echo 'id:'.$id.'<br>'; echo 'name:'.$name.'<br>'; echo '<hr/>'; } }else{ echo 'no data'; } //释放结果集 $mysqli_stmt->free_result(); //关闭预处理语句 $mysqli_stmt->close(); //关闭连接 $mysqli->close();
使用预处理语句防止sql注入
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $sql = "select * from user where username=? and password=?"; $mysqli_stmt = $mysqli->prepare($sql); $username = "name"; $password = "password"; //第一个参数指定数据类型,i表示整形,s表示字符型,d表示浮点型, //例如isd表示插入语句中第一个占位符是整形,第二个第三个是字符串和浮点 $mysqli_stmt->bind_param('ss',$username,$password); if($mysqli_stmt->execute()){ $mysqli_stmt->store_result(); if($mysqli_stmt->num_rows>0){ echo '登录成功'; }else{ echo '登录失败'; } } //释放结果集 $mysqli_stmt->free_result(); //关闭预处理语句 $mysqli_stmt->close(); //关闭连接 $mysqli->close();
事务处理
$mysqli = @new mysqli('localhost','root','','test'); if($mysqli->connect_error){ die("error:".$mysqli->connect_error); } $mysqli->autocommit(FALSE);//关闭自动提交 //用户king加200块钱 $sql1 = "update account set money=money+200 where name='king'"; $res1 = $mysqli->query($sql1); $res1_affected_rows = $mysqli->affected_rows; //用户kqueen减200块钱 $sql2 = "update account set money=money-200 where name='queen'"; $res2 = $mysqli->query($sql2); $res2_affected_rows = $mysqli->affected_rows; if($res1 && $res1_affected_rows>0 && $res2 && $res2_affected_rows>0){ $mysqli->commit(); $mysqli->autocommit(TRUE); echo "转账成功"; }else{ $mysqli->rollback(); echo "转账失败"; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- MySQL中的integer 数据类型
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- JSP/PHP基于Ajax的分页功能实现
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 数据库链接字符串查询网站
- 关于PHP通过PDO用中文条件查询MySQL的问题。