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 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PDO::lastInsertId讲解
Jan 29 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
PHP多进程简单实例小结
Nov 09 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 已经成熟
2006/12/04 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
vue路由--网站导航功能详解
2019/03/29 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
js实现点击生成随机div
2020/01/16 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
军训通讯稿范文
2015/07/18 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang