PDO是一种在PHP中连接数据库的接口,可以通过PDO接口使用PHP连接达梦数据库。
1、安装PHP环境
检查当前环境是否安装PHP
root@localhost \~\]# php -v  

当前环境并未安装PHP,需要进行安装,选择安装PHP7.3版本。
#### 2、安装 epel-release源和源管理工具yum-utils
\[root@localhost \~\]# yum -y install epel-release yum-utils  
安装如下源  


完成安装...
#### 3、安装Remi软件源
当前操作系统为centos 7,可以执行如下语句进行安装:  
\[root@localhost \~\]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm  

完成安装...
#### 4、安装PHP7.3的其他依赖包
\[root@localhost \~\]# yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xml
#### 5、查看PHP73版本

#### 6、启动服务,开机自启,查看状态
\[root@localhost \~\]# systemctl enable php73-php-fpm  
\[root@localhost \~\]# systemctl status php73-php-fpm  
\[root@localhost \~\]# systemctl start php73-php-fpm  
如下:

#### 7、给PHP添加达梦的驱动
达梦的php驱动路径在$DM_HOME/driver/php_pdo下(此处达梦数据库安装目录为/home/dmdba/DM_soft/DM_db)

PHP的驱动路径如下,将达梦的php驱动拷贝到该目录下:

拷贝驱动文件:

查看PHP驱动目录:

#### 8、找到php.ini和pdo.ini配置文件

如果没有php.ini文件,可以使用该命令生成:  
\[root@localhost \~\]# php73 -r "phpinfo();" \| grep 'php.ini'
#### 9、修改配置文件
\[root@localhost \~\]# vi /etc/opt/remi/php73/php.ini

在最后一行添加extension=libphp73_dm.so
\[root@localhost \~\]# vi /etc/opt/remi/php73/php.d/20-pdo.ini  

在最后一行添加extension=php73_pdo_dm.so
\[root@localhost \~\]# vi /etc/profile  
编辑系统配置文件,在最后一行添加  

\[root@localhost \~\]# source /etc/profile  
使改动生效

如上图所示,达梦驱动加载正常
#### 10、PHP连接达梦数据库测试
\[root@localhost workspace\]# cat test.php
    getMessage()."
";
       die();
    }
    ?>
复制
运行PHP文件,查看执行结果  
\[root@localhost workspace\]# php73 test.php  
connec tsuccess!
使用php查询数据:
    query($sql);
    var_dump($stmt->fetchAll(2));
    }
    catch(PDOException $e){
    print "Error: ". $e->getMessage()."
";
       die();
    }
    ?>
复制
执行结果如下:

输入参数查询数据:
    prepare($sql);
    $stmt->execute(array('name'=>$name,'id'=>$id));
    var_dump($stmt->fetchAll(2));
    }
    catch(PDOException $e){
    print "Error: ". $e->getMessage()."
";
       die();
    }
    ?>
复制
执行结果如下:

查询并插入数据样例:
    connect_error)){
    echo "connect success!\n";
    }
    //show value
    $name="aaa";
    $id=1;
    $sql="select * from test where name=:name and id=:id";
    $stmt=$pdo->prepare($sql);
    $stmt->execute(array('name'=>$name,'id'=>$id));
    var_dump($stmt->fetchAll(2));
    //insert
    $sql2="insert into test values('3','ccc')";
    if($pdo->query($sql2)){
      echo "insert success! \n";
    }else{
      echo "insert wrong" . $pdo->error;
    }
    //close session
    $pdo=null;
    $stmt=null;
    }
    catch(PDOException $e){
    print "Error: ". $e->getMessage()."
";
       die();
    }
    ?>
复制
修改和删除数据样例:
    connect_error)){
    echo "connect success!\n";
    }
    //update
    $name="aaa";
    $id=1;
    $sql="update test set name='user1' where name=:name and id=:id";
    $stmt=$pdo->prepare($sql);
    $stmt->execute(array('name'=>$name,'id'=>$id));
    //delete
    $sql2="delete from test where id=3";
    if($pdo->query($sql2)){
      echo "delete success! \n";
    }else{
      echo "delete wrong" . $pdo->error;
    }
    //close session
    $pdo=null;
    $stmt=null;
    }
    catch(PDOException $e){
    print "Error: ". $e->getMessage()."
";
       die();
    }
    ?>
复制
可以使用$pdo-\>query和$pdo-\>prepare两种方式来执行SQL,这两种函数执行的逻辑与jdbc中的executeQuery和preparedstatment相同