关键词搜索

源码搜索 ×
×

PHP mysqli 操作数据库

发布2016-11-16浏览1082次

详情内容

由于mysql连接方式被废除,据说在php7中要使用mysql_connect()还需要额外下载组件。
使用mysqli有面向过程和面向对象两种方式。
mysqli提供了三个类:

  1. mysqli 连接相关的

  2. mysqli_result 处理结果集

  3. mysqli_stmt 预处理

数据库连接

  1. <?php
  2. $db_host = 'localhost';
  3. $db_name = 'test';
  4. $db_user = 'root';
  5. $db_pwd = '';
  6. //面向对象方式
  7. $mysqli = new mysqli($db_host, $db_user, $db_pwd, $db_name);
  8. //面向对象的昂视屏蔽了连接产生的错误,需要通过函数来判断
  9. if(mysqli_connect_error()){
  10. echo mysqli_connect_error();
  11. }
  12. //设置编码
  13. $mysqli->set_charset("utf8");//或者 $mysqli->query("set names 'utf8'")
  14. //关闭连接
  15. $mysqli->close();
  16. //面向过程方式的连接方式
  17. $mysqli = mysqli_connect($db_host, $db_user, $db_pwd, $db_name);
  18. //判断是否连接成功
  19. if(!$mysqli ){
  20. echo mysqli_connect_error();
  21. }
  22. //关闭连接
  23. mysqli_close($mysqli);
  24. ?>


数据库查询

通用:执行sql语句都可用query(sql),执行失败会返回false,select成功则返回结果集对象,其他返回true,只要不是false就说明sql语句执行成功了。

  1. <?php
  2. //无结果集示例
  3. $sql = "insert into table_name (`name`, `address`) values ('xiaoming', 'adddddrrreess')";
  4. $result = $mysqli->query($sql);
  5. //或者
  6. $sql = "delete from table_name where name='xiaoming'";
  7. $result = $mysqli->query($sql);
  8. if($result === false){
  9. echo $mysqli->error;
  10. echo $mysqli->errno;
  11. }
  12. //影响条数
  13. echo $mysqli->num_rows;
  14. //插入的id
  15. echo $mysqli->insert_id;
  16. $mysqli->close();


有结果集

  1. <?php
  2. $sql = "select * from table_name";
  3. $result = $mysqli->query($sql);
  4. if($result === false){//执行失败
  5. echo $mysqli->error;
  6. echo $mysqli->errno;
  7. }
  8. //行数
  9. echo $result->num_rows;
  10. //列数 字段数
  11. echo $result->field_count;
  12. //获取字段信息
  13. $field_info_arr = $result->fetch_fields();
  14. //移动记录指针
  15. //$result->data_seek(1);//0 为重置指针到起始
  16. //获取数据
  17. while($row = $result->fetch_assoc()){
  18. echo $row['name'];
  19. echo $row['address'];
  20. }
  21. //也可一次性获取所有数据
  22. //$result->data_seek(0);//如果前面有移动指针则需重置
  23. $data = $result->fetch_all(MYSQLI_ASSOC);
  24. $mysqli->close();



预处理示例

预处理能有效的防止sql注入的产生,mysqli_stmt是预处理类


  1. <?php
  2. $sql = "insert inro table_name ('name','address') values (?,?)";
  3. //获得预处理对象
  4. $stmt = $mysqli->prepare($sql);
  5. //绑定参数 第一个参数为绑定的数据类型
  6. /*
  7. i:integer 整型
  8. d:double 浮点型
  9. s:string 字符串
  10. b:a blob packets blob数据包
  11. */
  12. $name = "xiaoming";
  13. $address = "adddressss";
  14. $stmt->bind_param("ss", $name, $address);//绑定时使用变量绑定
  15. //执行预处理
  16. $stmt->execute();
  17. /*
  18. //可重新绑定 多次执行
  19. $stmt->bind_param("ss", $name, $address);
  20. $stmt->execute();
  21. */
  22. //插入的id 多次插入为最后id
  23. echo $stmt->insert_id;
  24. //影响行数 也是最后一次执行的
  25. echo $stmt->affected_rows;
  26. //错误号
  27. echo $stmt->errno;
  28. //错误信息
  29. echo $stmt->error;
  30. //关闭
  31. $stmt->close();
  32. $mysqli->close();

下面示例select的预处理

  1. //注释部分省略
  2. $sql = "select * from table_name where id<?";
  3. $stmt = $mysqli->prepare($sql);
  4. $id = 30;
  5. $stmt->bind_param("i", $id);
  6. $stmt->execute();
  7. //获取结果集
  8. $result = $stmt->get_result();//结果集取后的操作就和之前一样了
  9. //获取所有数据
  10. $data = $result->fetch_all(MYSQLI_ASSOC);
  11. $result->close();
  12. $mysqli->close();

一次执行多条sql语句multiquery(不推荐),执行结果不是结果集,affectd_rows是最后影响的条数


  1. <?php
  2. $sql_arr = array(
  3. "insert into table_name (`name`,`address`) values ('xiaoming','a')",
  4. "insert into table_name (`name`,`address`) values ('xiaohong','a')",
  5. 'delete from table_name where id=23',
  6. );
  7. $sql = implode(';', $sql_arr);
  8. $result = $mysqli->multi_query($sql);
  9. if($result === false){
  10. echo $mysqli->error;
  11. }
  12. $mysqli->close();





引用:https://segmentfault.com/a/1190000003841357

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载