搜索
首页后端开发php教程微信公众平台开发 - 数据库操作_PHP教程

【PHP微信公众平台开发系列】

01.配置微信接口
02.公众平台示例代码分析
03.订阅事件(subscribe)处理
04.简单回复功能开发
05.天气预报功能开发
06.翻译功能开发
07.聊天机器人功能开发 
08.自定义菜单功能
09.数据库操作


本文地址:http://www.phpchina.com/archives/view-43411-1.html
本系列由PHPChina特邀作者@David_Tang供稿,转载请注明作者信息与本文地址。

一、简介

前面讲解的功能开发都是简单的调用API 完成的,没有对数据库进行操作。在接下来的高级功能开发中,需要使用到数据库,所以在这一篇中,将对MySQL 数据库的操作做一下简单的介绍,以供读者参考。

二、思路分析

百度开发者中心提供了强大的云数据库(包括MySQL, MongoDB, Redis),在这一节教程中,我们将对大家比较熟悉的MySQL 数据库进行操作演示,实现微信与数据库的交互。

在BAE应用中使用云数据库十分简单,数据库列表中的名称即是连接数据库时的dbname。用户名、密码、连接地址和端口在应用中通过环境变量取出。

可使用标准的PHP Mysql 或PHP Mysqli 扩展访问数据库,BAE的PHP中已提供这两个扩展,应用可直接使用。

官方文档,请参考:http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/mysql

三、创建BAE MySQL数据库

3.1 登陆百度开发者中心 -> 管理中心 -> 选择应用 -> 云环境 -> 服务管理 -> MySQL(云数据库) -> 创建数据库

3.2 创建数据库

注意:每个应用有且只有一个数据库享受1G免费配额,其余数据库均不享受免费配额优惠。只有将已使用免费配额的数据库删除,才能再次使用此项优惠。

3.3 创建成功

在这里可以看到数据库的名称,也就是dbname,后面会使用到。

点击 “phpMyadmin” 访问数据库。

3.4 phpMyadmin界面

新建数据表,输入表名及字段数,点击 “执行” 创建表。

3.5 创建表

输入字段名及字段类型,输入完毕后,点击下面的“保存”,完成表的创建。

3.6 创建完成

修改id 字段为主键并添加AUTO_INCREMENT;修改from_user 字段为唯一(UNIQUE),完成表的修改。

建表操作也可以使用以下SQL语句完成:

复制代码
CREATE TABLE IF NOT EXISTS `test_mysql` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `from_user` varchar(40) DEFAULT NULL,
  `account` varchar(40) DEFAULT NULL,
  `password` varchar(40) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `from_user` (`from_user`)
);
复制代码

phpMyAdmin 操作

数据库及数据表的创建到此结束,下面将编写代码对数据库及数据表的使用做详细讲解。

四、官方示例(PHP MySQL)

BAE 官方提供的demo(PHP MySQL)示例如下:

mysql/basic.php 文件内容

复制代码
<?php
/**
 * MySQL示例,通过该示例可熟悉BAE平台MySQL的使用(CRUD)
 */
require_once("../configure.php");
    /*替换为你自己的数据库名(可从管理中心查看到)*/
    $dbname = MYSQLNAME;
     
    /*从环境变量里取出数据库连接需要的参数*/
    $host = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_IP&#39;);
    $port = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_PORT&#39;);
    $user = getenv(&#39;HTTP_BAE_ENV_AK&#39;);
    $pwd = getenv(&#39;HTTP_BAE_ENV_SK&#39;);
    
    /*接着调用mysql_connect()连接服务器*/
    $link = @mysql_connect("{$host}:{$port}",$user,$pwd,true);
    if(!$link) {
      die("Connect Server Failed: " . mysql_error());
    }
    /*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
    if(!mysql_select_db($dbname,$link)) {
      die("Select Database Failed: " . mysql_error($link));
    }
    /*至此连接已完全建立,就可对当前数据库进行相应的操作了*/
    /*!!!注意,无法再通过本次连接调用mysql_select_db来切换到其它数据库了!!!*/
    /* 需要再连接其它数据库,请再使用mysql_connect+mysql_select_db启动另一个连接*/
     
    /**
    * 接下来就可以使用其它标准php mysql函数操作进行数据库操作
    */
    
    //创建一个数据库表
    $sql = "create table if not exists test_mysql(
            id int primary key auto_increment,
            no int, 
            name varchar(1024),
            key idx_no(no))";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Create Table Failed: " . mysql_error($link));
    } else {
        echo "Create Table Succeed<br />";
    }
    
    //插入数据
    $sql = "insert into test_mysql(no, name) values(2007,&#39;this is a test message&#39;),
            (2008,&#39;this is another test message&#39;),
            (2009,&#39;xxxxxxxxxxxxxx&#39;)";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Insert Failed: " . mysql_error($link));
    } else {
        echo "Insert Succeed<br />";
    }
    
    //删除数据
    $sql = "delete from test_mysql where no = 2008";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Delete Failed: " . mysql_error($link));
    } else {
        echo "Delete  Succeed<br />";
    }
    
    //修改数据
    $sql = "update test_mysql set name = &#39;yyyyyy&#39; where no = 2009";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Update Failed: " . mysql_error($link));
    } else {
        echo "Update Succeed<br />";
    }
    
    
    //检索数据
    $sql = "select id,no,name from test_mysql";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Select Failed: " . mysql_error($link));
    } else {
        echo "Select Succeed<br />";
        while ($row = mysql_fetch_assoc($ret)) {
            echo "{$row[&#39;id&#39;]} {$row[&#39;no&#39;]} {$row[&#39;name&#39;]}<br />";
        }
    }
    
    //删除表
    $sql = "drop table if exists test_mysql";
    $ret = mysql_query($sql, $link);
    if ($ret === false) {
        die("Drop Table Failed: " . mysql_error($link));
    } else {
        echo "Drop Table Succeed<br />";
    }


?>
复制代码

configure.php 文件内容

<?php

    /***配置数据库名称***/
    define("MYSQLNAME", "qzMlSkByflhScPCOFtax");

?>

测试使用:

执行成功。 

五、修改成可调用的函数形式(PHP MySQL)

5.1 创建数据表

//创建一个数据库表
function _create_table($sql){
    mysql_query($sql) or die(&#39;创建表失败,错误信息:&#39;.mysql_error());
    return "创建表成功";
}

5.2 插入数据

复制代码
//插入数据
function _insert_data($sql){
      if(!mysql_query($sql)){
        return 0;    //插入数据失败
    }else{
          if(mysql_affected_rows()>0){
              return 1;    //插入成功
          }else{
              return 2;    //没有行受到影响
          }
    }
}
复制代码

5.3 删除数据

复制代码
//删除数据
function _delete_data($sql){
      if(!mysql_query($sql)){
        return 0;    //删除失败
      }else{
          if(mysql_affected_rows()>0){
              return 1;    //删除成功
          }else{
              return 2;    //没有行受到影响
          }
    }
}
复制代码

5.4 修改数据

复制代码
//修改数据
function _update_data($sql){
      if(!mysql_query($sql)){
        return 0;    //更新数据失败
    }else{
          if(mysql_affected_rows()>0){
              return 1;    //更新成功;
          }else{
              return 2;    //没有行受到影响
          }
    }
}
复制代码

5.5 检索数据

//检索数据
function _select_data($sql){
    $ret = mysql_query($sql) or die(&#39;SQL语句有错误,错误信息:&#39;.mysql_error());
    return $ret;
}

5.6 删除数据表

//删除表
function _drop_table($sql){
    mysql_query($sql) or die(&#39;删除表失败,错误信息:&#39;.mysql_error());
    return "删除表成功";
}

将以上函数和连接数据库的代码结合起来,生成mysql_bae.func.php 文件,供下面测试使用。

六、测试MySQL 函数使用

6.1 新建文件dev_mysql.php 在同一目录下并引入mysql_bae.func.php 文件

require_once &#39;./mysql_bae.func.php&#39;;

6.2 测试创建表

将上面使用phpMyAdmin 创建的test_mysql 表删除,测试语句如下:

复制代码
//创建表
$create_sql = "CREATE TABLE IF NOT EXISTS `test_mysql` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `from_user` varchar(40) DEFAULT NULL,
  `account` varchar(40) DEFAULT NULL,
  `password` varchar(40) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `from_user` (`from_user`)
)";

echo _create_table($create_sql);
复制代码

测试正确结果:

到phpMyAdmin中查看

故意将SQL语句写错

测试错误结果:

6.3 测试插入数据

测试语句如下:

复制代码
//插入数据
$insert_sql = "insert into test_mysql(from_user, account, password, update_time) values(&#39;David&#39;,&#39;860510&#39;, &#39;abcabc&#39;, &#39;2013-09-29 17:14:28&#39;)";

$res = _insert_data($insert_sql);
if($res == 1){
    echo "插入成功";
}else{
    echo "插入失败";
}
复制代码

测试结果:

6.4 测试更新数据

测试语句如下:

复制代码
//更新数据
$update_sql = "update test_mysql set account = 860512 where account = 860510";

$res = _update_data($update_sql);
if($res == 1){
    echo "更新成功";
}elseif($res == 0){
    echo "更新失败";
}elseif($res == 2){
    echo "没有行受到影响";
}
复制代码

测试结果:

再次更新:

6.5 测试删除数据

测试语句如下:

复制代码
//删除数据
$delete_sql = "delete from test_mysql where account = 860512";

$res = _delete_data($delete_sql);
if($res == 1){
    echo "删除成功";
}elseif($res == 0){
    echo "删除失败";
}elseif($res == 2){
    echo "没有该条记录";
}
复制代码

测试结果:

再次删除:

6.6 测试检索数据

再次执行上面的插入操作做检索测试,测试语句如下:

复制代码
//检索数据
$select_sql = "select * from test_mysql";

$result = _select_data($select_sql);

while($rows = mysql_fetch_array($result,MYSQL_ASSOC)){

    echo $rows[id]."--".$rows[from_user]."--".$rows[account]."--".$rows[password]."--".$rows[update_time];
    echo "<br />";

}
复制代码

测试结果:

6.7 测试删除表

测试语句如下:

//删除表
$drop_sql = "drop table if exists test_mysql";

echo _drop_table($drop_sql);

测试结果:

MySQL 函数测试全部成功。

七、实现与微信的交互(Mysql 扩展)

保证数据库中存在test_msyql表,这里测试微信对MySQL数据库的增删改查操作,不考虑特殊情况,只按照下面的方法测试:

复制代码
1. 绑定+账户+密码
如:绑定+860512+abc123

2. 查询
如:查询

3. 修改+旧密码+新密码
如:修改+abc123+123456

4. 删除
如:删除
复制代码

7.1 引入mysql_bae.func.php 文件

//引入数据库函数文件
require_once &#39;mysql_bae.func.php&#39;;

7.2 前置操作

A. 将输入的语句拆分成数组,以“+”号分隔

$keywords = explode("+",$keyword);

B. 获取当前时间

//获取当前时间
$nowtime=date("Y-m-d G:i:s");

C. 判断用户是否已经绑定

复制代码
//判断是否已经绑定
$select_sql="SELECT id from test_mysql WHERE from_user=&#39;$fromUsername&#39;";
$res=_select_data($select_sql);
$rows=mysql_fetch_array($res, MYSQL_ASSOC);
if($rows[id] <> &#39;&#39;){
        $user_flag=&#39;y&#39;;          
}
复制代码

7.3 测试插入操作

测试代码:

复制代码
if(trim($keywords[0] == &#39;绑定&#39;)){
    if($user_flag <> &#39;y&#39;){
        $insert_sql="INSERT INTO test_mysql(from_user, account, password, update_time) VALUES(&#39;$fromUsername&#39;,&#39;$keywords[1]&#39;,&#39;$keywords[2]&#39;,&#39;$nowtime&#39;)";
        $res = _insert_data($insert_sql);
        if($res == 1){
            $contentStr = "绑定成功";
        }elseif($res == 0){
            $contentStr = "绑定失败";
        }
    }else{
        $contentStr = "该账户已绑定";
    }
}
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

7.4 测试查询操作

测试代码:

复制代码
if(trim($keywords[0] == &#39;查询&#39;)){
    $select_sql="SELECT * FROM test_mysql WHERE from_user=&#39;$fromUsername&#39;";
    $select_res=_select_data($select_sql);
    $rows=mysql_fetch_assoc($select_res);
    if($rows[id] <> &#39;&#39;){
    $contentStr="账户:$rows[account]\n"."密码:$rows[password]\n"."From_user:$rows[from_user]\n"."更新时间:$rows[update_time]";
    }else{
    $contentStr="您还未绑定账户,查询不到相关信息,请先绑定,谢谢!";
    }
}
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

7.5 测试更新操作

测试代码:

复制代码
if(trim($keywords[0] == "修改")){
    $old_password=$keywords[1];
    $new_password=$keywords[2];
    $select_password_sql="SELECT * FROM test_mysql WHERE from_user=&#39;$fromUsername&#39;";
    $select_res=_select_data($select_password_sql);
    $rows=mysql_fetch_assoc($select_res);
    if($old_password == $rows[password]){
        $update_sql="UPDATE test_mysql SET password=&#39;$new_password&#39; WHERE from_user=&#39;$fromUsername&#39;";
        $res = _update_data($update_sql);
        if($res == 1){
            $contentStr = "修改成功";
        }elseif($res == 0){
            $contentStr = "修改失败";
        }
    }else{
        $contentStr = "原密码有误,请确认后重试";
    }
}
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

7.6 测试删除操作

测试代码:

复制代码
if(trim($keywords[0] == "删除")){
    $delete_sql="DELETE FROM test_mysql WHERE from_user=&#39;$fromUsername&#39;";
    $res = _delete_data($delete_sql);
    if($res == 1){
        $contentStr = "删除成功";
    }elseif($res == 0){
        $contentStr = "删除失败";
    }
}
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

与微信的交互测试成功。

八、PHP Mysqli 扩展,封装成类

将Mysqli 扩展封装成类使用,代码如下:

复制代码
<?php

require_once &#39;includes/configure.php&#39;;

class MySQLi_BAE{

    private $mysqli;
    private $host;
    private $user;
    private $password;
    private $port;
    private $database;

    //在类之外访问私有变量时使用
    function __get($property_name){
        if(isset($this->$property_name)){
            return($this->$property_name);
        }else{
            return(NULL);
        }    
    }

    function __set($property_name, $value){
        $this->$property_name=$value;
    }

    function __construct(){

        /*从平台获取查询要连接的数据库名称*/
        $this->database = MYSQLNAME;

        /*从环境变量里取出数据库连接需要的参数*/
        $this->host = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_IP&#39;);
        $this->user = getenv(&#39;HTTP_BAE_ENV_AK&#39;);
        $this->password = getenv(&#39;HTTP_BAE_ENV_SK&#39;);
        $this->port = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_PORT&#39;);

        $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->database, $this->port);
        if($this->mysqli->connect_error){
            die("Connect Server Failed:".$this->mysqli->error);
        }
        
        $this->mysqli->query("set names utf8");
    }

    //dql statement
    function execute_dql($query){
        
        $res = $this->mysqli->query($query) or die("操作失败".$this->mysqli->error);
        return $res;
        
        //$this->mysqli->close();
    }

    //dml statement
    function execute_dml($query){
        
        $res = $this->mysqli->query($query) or die("操作失败".$this->mysqli->error);
        
        if(!$res){
            return 0;//失败
        }else{
            if($this->mysqli->affected_rows > 0){
                return 1;//执行成功
            }else{
                return 2;//没有行受影响
            }
        }
    
        //$this->mysqli->close();
    }
}
?>
复制代码

九、测试类的使用

9.1 测试DML操作

测试代码:

复制代码
<?php

require_once "MySQLi_BAE.class.php";

$mysqli_BAE=new MySQLi_BAE();


//**************dml*******************
$sql="insert into test_mysql (from_user, account, password, update_time) values(&#39;David&#39;,&#39;860510&#39;, &#39;abcabc&#39;, &#39;2013-09-27 17:14:28&#39;)";

//$sql="update test_mysql set account = 860512 where account = 860510";

//$sql="delete from test_mysql where account = 860512";

$res=$mysqli_BAE->execute_dml($sql);

if($res==0){
    echo "执行失败";
}elseif($res==1){
    echo "执行成功";
}else{
    echo "没有行数影响";
}
?>
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

9.2 测试DQL操作

测试代码:

复制代码
<?php

require_once "MySQLi_BAE.class.php";

$mysqli_BAE=new MySQLi_BAE();

//**************dql******************
$sql="select * from test_mysql";

$res=$mysqli_BAE->execute_dql($sql);

while($row=$res->fetch_row()){
    
    foreach($row as $key=>$val){
        echo "$val--";
    }
    echo &#39;<br/>&#39;;
}

$res->free();
?>
复制代码

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

十、实现与微信的交互(Mysqli 扩展)

10.1 前置操作

A. 引入MySQLi_BAE.class.php 文件

//引入数据库函数文件
require_once "MySQLi_BAE.class.php";

B. 实例化对象

public function __construct()
{
    $this->mysqli_BAE=new MySQLi_BAE();
}

10.2 测试插入操作

测试代码:

$insert_sql="INSERT INTO test_mysql(from_user, account, password, update_time) VALUES(&#39;$fromUsername&#39;,&#39;$keywords[1]&#39;,&#39;$keywords[2]&#39;,&#39;$nowtime&#39;)";
$res = $this->mysqli_BAE->execute_dml($insert_sql);

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

10.3 测试查询操作

测试代码:

$select_sql="SELECT * FROM test_mysql WHERE from_user=&#39;$fromUsername&#39;";
$select_res=$this->mysqli_BAE->execute_dql($select_sql);
$rows=$select_res->fetch_array(MYSQLI_ASSOC);

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

10.4 测试更新操作

测试代码:

$update_sql="UPDATE test_mysql SET password=&#39;$new_password&#39; WHERE from_user=&#39;$fromUsername&#39;"; 
$res = $this->mysqli_BAE->execute_dml($update_sql);

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

10.5 测试删除操作

测试代码:

$delete_sql="DELETE FROM test_mysql WHERE from_user=&#39;$fromUsername&#39;";
$res = $this->mysqli_BAE->execute_dml($delete_sql);

测试结果:

微信公众平台开发  -  数据库操作_PHP教程

与微信交互测试成功。 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/742553.htmlTechArticle【PHP微信公众平台开发系列】 01.配置微信接口 02.公众平台示例代码分析 03.订阅事件(subscribe)处理 04.简单回复功能开发 05.天气预报功能...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
继续使用PHP:耐力的原因继续使用PHP:耐力的原因Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python:探索他们的相似性和差异PHP和Python:探索他们的相似性和差异Apr 19, 2025 am 12:21 AM

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP和Python:解释了不同的范例PHP和Python:解释了不同的范例Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP和Python:深入了解他们的历史PHP和Python:深入了解他们的历史Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

在PHP和Python之间进行选择:指南在PHP和Python之间进行选择:指南Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和框架:现代化语言PHP和框架:现代化语言Apr 18, 2025 am 12:14 AM

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHP的影响:网络开发及以后PHP的影响:网络开发及以后Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境