单个页面中 PHP 连接 MySQL 数据的基本操作【 mysqli 面向对象】

学习笔记 马富天 2019-03-25 16:45:21 14 1

【摘要】介绍一下 php 的内置 mysqli 面向对象操作数据库的增删改完整示例,主要是方便自己今后的快速编程。

第一段完整示例代码是没有对 SQL 语句进行预处理,适合用于不需要接收数据来源于 get/post 参数的场景,避免会出现 SQL 注入,如下:

  1. //	本页面方法没有对 SQL 语句进行预处理,适合用于不需要接收数据来源于 get/post 参数的场景
  2. //	可能会出现 SQL 注入
  3. //	页面基本信息
  4. header("Content-type:text/html;charset=utf-8");
  5. date_default_timezone_set("PRC");	
  6. error_reporting(0);
  7. ini_set("max_execution_time", 3600);
  8. //	数据库信息
  9. $db = array(
  10.     'host'     => '127.0.0.1',
  11.     'username' => 'root',
  12.     'password' => 'root',
  13.     'dbname'   => 'test',
  14.     'port'     => 3306,
  15.     'charset'  => 'utf8',
  16. );
  17. //	创建数据库对象
  18. $link = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname'],$db['port']);
  19. if($link->connect_errno)
  20. {
  21.     die("MySQL CONNECT ERROR:" . $link->connect_error);
  22. }
  23. //	设置数据库连接字符集
  24. $link->set_charset($db['charset']);
  25. //	查询操作
  26. $sql      = "SELECT * FROM `article`";
  27. $result   = $link->query($sql) or die($link->errno . ':' .$link->error);
  28. $num_rows =  $result->num_rows;	//	结果集的总行数
  29. //	遍历结果集
  30. if($num_rows > 0)
  31. {
  32. 	while($row = $result->fetch_assoc())
  33. 	{
  34. 		print_r($row);
  35. 	}
  36. }
  37. //	插入操作
  38. $insert_sql = sprintf("INSERT INTO `article`(title,uid) VALUES('%s',%d)","PHP mysqli",10);
  39. $link->query($insert_sql) or die($link->errno . ':' .$link->error);
  40. $insert_id = $link->insert_id;	//	上一步插入操作产生的 ID
  41. //	更新操作
  42. $update_sql = sprintf("UPDATE `article` SET title = '%s' WHERE id = %d", 'PHP 入门', 1);
  43. $link->query($update_sql) or die($link->errno . ':' .$link->error);
  44. $affected_rows = $link->affected_rows;	//	影响行数,0 则修改失败或修改的值未变化
  45. //	删除操作
  46. $delete_sql = sprintf("DELETE FROM `article` WHERE id = %d", 2);
  47. $link->query($delete_sql) or die($link->errno . ':' .$link->error);
  48. $affected_rows = $link->affected_rows;
  49. $link->close(); //	关闭数据库

第二段完整示例是针对需要接收 get/post 数据的操作,对 SQL 语句进行预处理,可以有效的避免 SQL 注入。

  1. //	页面基本信息
  2. header("Content-type:text/html;charset=utf-8");
  3. date_default_timezone_set("PRC");	
  4. //	error_reporting(0);
  5. ini_set("max_execution_time", 3600);
  6. //	数据库信息
  7. $db = array(
  8.     'host'     => '127.0.0.1',
  9.     'username' => 'root',
  10.     'password' => 'root',
  11.     'dbname'   => 'test',
  12.     'port'     => 3306,
  13.     'charset'  => 'utf8',
  14. );
  15. //	创建数据库对象
  16. $link = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname'],$db['port']);
  17. if($link->connect_errno)
  18. {
  19.     die("MySQL CONNECT ERROR:" . $link->connect_error);
  20. }
  21. //	设置数据库连接字符集
  22. $link->set_charset($db['charset']);
  23. //	查询操作
  24. $select_sql = "SELECT * FROM `article` WHERE title LIKE ?";	//	占位符必须被用在整个值的位置
  25. @$_GET['kw'] = "PHP";
  26. $kw = "%".$_GET['kw']."%";	//	% 放在这里生效
  27. $stmt = $link->prepare($select_sql);
  28. $stmt->bind_param("s",$kw);
  29. $stmt->execute();
  30. $result = $stmt->get_result();
  31. $tot = $stmt->affected_rows;	//	结果集的总行数
  32. //	$tot = $link->affected_rows;	//	结果集的总行数
  33. if($tot > 0)
  34. {
  35. 	while($row = $result->fetch_assoc())
  36. 	{
  37. 		var_dump($row);
  38. 	}
  39. }
  40. //	插入操作
  41. $title = "Python";
  42. $uid = 200;
  43. $insert_sql = "INSERT INTO `article`(title,uid) VALUES(?,?)";
  44. $stmt = $link->prepare($insert_sql);
  45. $stmt->bind_param("si",$title,$uid);	//	i:整数,d:浮点数,b:BLOB,s:字符串
  46. $stmt->execute();
  47. echo $stmt->insert_id;	//	上一步插入操作产生的 ID
  48. echo $stmt->affected_rows;	//	影响行数
  49. //	更新操作
  50. $title = "Hello world";
  51. $update_id = [1,2,3];
  52. $update_ids = rtrim( str_pad('?', 2 * count($update_id), ',?') , ',');
  53. $update_sql = "UPDATE `article` SET title = ? WHERE id in (?)";
  54. $stmt = $link->prepare($update_sql);
  55. $stmt->bind_param("ss",$title,$update_ids);
  56. $stmt->execute();
  57. echo $stmt->affected_rows;	//	影响行数
  58. //	删除操作
  59. $delete_id = 10;
  60. $delete_sql = "DELETE FROM `article` WHERE id = ?";
  61. $stmt = $link->prepare($delete_sql);
  62. $stmt->bind_param("i",$delete_id);
  63. $stmt->execute();
  64. echo $stmt->affected_rows;	//	影响行数
  65. $stmt->close(); //	释放结果集
  66. $link->close(); //	关闭数据库

最后给出文中用到的表结构:

  1. CREATE TABLE `article` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(255) DEFAULT NULL,
  4.   `uid` int(11) DEFAULT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以上代码可以用于快速对数据库进行操作!用于方便自己、方便大家。

版权归 马富天PHP博客 所有

本文标题:《单个页面中 PHP 连接 MySQL 数据的基本操作【 mysqli 面向对象】》

本文链接地址:http://www.mafutian.net/413.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 MySQL 数据库用户权限管理简介 》 下一篇《 Python 发送邮件(多收件人,纯文本格式、无附件) 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共1条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多