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 memcache扩展的三种安装方法
Apr 26 PHP
PHP基础学习小结
Apr 17 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
简单谈谈PHP中的trait
Feb 25 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
虫族 ZERG 概述
2020/03/14 星际争霸
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
详解Eslint 配置及规则说明
2018/09/10 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
使用vue实现各类弹出框组件
2019/07/03 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
python抓取网页内容示例分享
2014/02/24 Python
python 七种邮件内容发送方法实例
2014/04/22 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
python 实现逻辑回归
2020/12/30 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
产品质量承诺书
2014/03/27 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫