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 相关文章推荐
example1.php
Oct 09 PHP
PHP中显示格式化的用户输入
Oct 09 PHP
PHP中在数据库中保存Checkbox数据(2)
Oct 09 PHP
一些关于PHP的知识
Nov 17 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
一个PHP分页类的代码
May 18 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
PHP通过串口实现发送短信
Jul 08 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP网络操作函数汇总
2015/05/18 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
python如何实现word批量转HTML
2020/09/30 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
上课迟到检讨书
2014/01/19 职场文书
2014年信用社工作总结
2014/11/25 职场文书
监理中标通知书
2015/04/16 职场文书
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python