PHP连接MySQL数据库并以json格式输出


Posted in PHP onMay 21, 2018

1.简介

PHP连接数据库有多种方法,现介绍常用的MySQL数据库连接方法,PHP连接MySQL也有两种方式,一是面向对象,二是面向过程方式,两种方法稍有区别。下面通过代码介绍两种方法连接MySQL并以json格式输出。

2、面向对象方式

<?php 
header("content-Type: text/html; charset=utf-8");//字符编码设置 
$servername = "localhost"; 
$username = "root"; 
$password = "123456"; 
$dbname = "mydb"; 
 
// 创建连接 
$conn =new mysqli($servername, $username, $password, $dbname); 
// 检测连接 
if ($conn->connect_error) { 
  die("Connection failed: " . $conn->connect_error); 
} 
 
$sql = "SELECT * FROM power WHERE DATE='2014-1-1'"; 
$result = $conn->query($sql); 
 
$arr = array(); 
// 输出每行数据 
while($row = $result->fetch_assoc()) { 
  $count=count($row);//不能在循环语句中,由于每次删除row数组长度都减小 
  for($i=0;$i<$count;$i++){ 
    unset($row[$i]);//删除冗余数据 
  } 
  array_push($arr,$row); 
 
} 
//print_r($arr); 
echo json_encode($arr,JSON_UNESCAPED_UNICODE);//json编码 
$conn->close(); 
 
?>

3.面向过程方式

<?php 
header("content-Type: text/html; charset=utf-8");//字符编码设置 
$servername = "localhost"; 
$username = "root"; 
$password = "123456"; 
$dbname = "mydb"; 
 
// 创建连接 
$con =mysqli_connect($servername, $username, $password, $dbname); 
// 检测连接 
if (mysqli_connect_errno()) 
{ 
  echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
 
$sql = "SELECT * FROM power WHERE DATE='2014-1-1'"; 
$result = mysqli_query($con,$sql); 
 
$arr = array(); 
while($row = mysqli_fetch_array($result)) { 
  $count=count($row);//不能在循环语句中,由于每次删除 row数组长度都减小 
  for($i=0;$i<$count;$i++){ 
    unset($row[$i]);//删除冗余数据 
  } 
 
  array_push($arr,$row); 
 
} 
echo json_encode($arr,JSON_UNESCAPED_UNICODE); 
mysqli_close($con); 
 
?>

4.输出json示例

[{"NAME":"小区1","DM":"A","LNG":"564142.623","LAT":"4329376.169","DATE":"2014-1-1","VAL":"26.8"},{"NAME":"小区2","DM":"B","LNG":"563089.677","LAT":"4329311.017","DATE":"2014-1-1","VAL":"26.8"}]

5.json输出说明

由于$row = mysqli_fetch_array($result)获取数据的一行数据并以数组形式存储,里边除了字段和值键值对外默认还会有0,1,2……下标存在,如下所示

Array ( [0] => 小区1 [NAME] => 小区1 [1] => A [DM] => A [2] => 564142.623 [LNG] => 564142.623 [3] => 4329376.169 [LAT] => 4329376.169 [4] => 2014-1-1 [DATE] => 2014-1-1 [5] => 26.8 [VAL] => 26.8 )

如此数据就出现冗余,unset方法则是删除数组冗余数据,之后再添加到$arr数组中。
另外在json编码中json_encode($arr);会出现中文被unicode编码,php5.3加入了options参数, 5.4以后才加入JSON_UNESCAPED_UNICODE,这个参数,不需要做escape和unicode处理。所以在5.4之前都需要对中文做个处理 。5.4里面直接补上代码中的参数即可。

整理网上的方法,5.4之前处理方法有两种,方法1:在实际应用中有个问题,部分字符会掉,原因暂不清楚。

function encode_json($arr){ 
  $code = json_encode($arr); 
  return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code); 
}

方法2:先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理

function encode_json($str) { 
  return urldecode(json_encode(url_encode($str)));   
} 
 
/** 
 * 
 */ 
function url_encode($str) { 
  if(is_array($str)) { 
    foreach($str as $key=>$value) { 
      $str[urlencode($key)] = url_encode($value); 
    } 
  } else { 
    $str = urlencode($str); 
  } 
   
  return $str; 
}

mysqli连接mysql数据库的常用方法(面向对象和面向过程)

相信开始学习PHP的伙伴们用的都是php4,或者php5,在这些版本中都有一个连接数据库的函数mysql_connect(),但在使用php5.5及5.5以上版本时,你会发现使用mysql_connect()会直接报错,这是因为php5.5以后的版本考虑到未来的可移植性和安全性,性能而废弃了mysql_connect()函数,所以我们只能使用mysqli_connect()和PDO,这里我说一下mysqli_connect()。

mysqli_connect()的两种方式,面向过程和面向对象的连接数据库方法。

(1)面向过程连接数据库:

<!-- 面向过程的数据库mysqli连接 --> 
<?php 
  $conn=mysqli_connect("localhost","root","950609","user"); 
  // 连接数据库user 
  if (!$conn) { 
    # code...判断链接是否成功 
    echo "连接失败!"; 
    echo mysqli_connect_error(); 
    exit(); 
  } 
  mysqli_query($conn,"set names utf8"); 
  // 指定编码格式 
  $sql="select * from goods"; 
  // sql语句 
  $result=mysqli_query($conn,$sql); 
  // 执行sql语句,将执行结果返回到结果集中 
  $row=mysqli_fetch_array($result); 
  // 从结果集中取得一行作为数组 
  echo "<pre>"; 
  print_r($row); 
?>

(2)面向对象的数据库连接

<!-- 面向对象的数据库mysqli连接 --> 
lt;?php 
$mysqli=new mysqli("localhost","root","950609","user"); 
if ( $mysqli -> connect_error ) { 
  die( 'Connect Error (' . $mysqli -> connect_errno . ') ' 
      . $mysqli -> connect_error ); 
} 
$sql = "select * from goods"; 
  $mysqli->set_charset("utf8");  
  $result = $mysqli->query($sql);  
  $row = $result->fetch_array(); // 从结果集中取得一行作为数组  
  echo '<pre>'; 
  print_r($row);  
  /* free result set */  
  $result->free();  
  /* close connection */  
  $mysqli->close();  
>

这篇文章就介绍到这了,关于PHP连接MySQL数据库并以json格式输出的实现代码,需要的朋友可以参考一下。

PHP 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
五个PHP程序员工具
May 26 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
Yii rules常用规则示例
Mar 15 PHP
PHP下载文件的函数实例代码
May 18 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 PHP
PHP 访问数据库配置通用方法(json)
May 20 #PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 #PHP
windows环境下使用Composer安装ThinkPHP5
May 18 #PHP
PHP实现登录验证码校验功能
May 17 #PHP
php识别翻转iphone拍摄的颠倒图片
May 17 #PHP
php通过各种函数判断0和空
Jul 04 #PHP
PHP手机短信验证码实现流程详解
May 17 #PHP
You might like
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
php扩展开发入门demo示例
2019/09/23 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python中static相关知识小结
2018/01/02 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python 多维List创建的问题小结
2019/01/18 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python求最大值最小值方法总结
2019/06/25 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
linux系统都有哪些运行级别
2016/03/26 面试题
2014年大班元旦活动方案
2014/02/26 职场文书
小班下学期评语
2014/05/04 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书