用PHP访问MySQL数据库的方法

首先

以下为“如何使用php从mysql操作”方法总结的备忘:

在标题所示,本文将总结从php操作mysql的方法。

环境

CentOS7.4
php5.4.16
5.5.56-MariaDB(mysql)
※请直接将Mariadb视为Mysql的继承版本,基本使用方式没有变化。

◆建立数据库服务器

使用以下命令安装MariaDB。
yum -y安装mariadb mariadb-server

暂时启动mariadb。※启用是指在系统启动时自动启动mariadb的命令。
systemctl start mariadb
systemctl enable mariadb

确定Mariadb已经成功启动,请使用以下命令:
systemctl status mariadb

连接到DB服务器。
执行命令后,确认出现”欢迎使用MariaDB监控器”字符串。
mysql -u root

设置密码。
※()内的password可更改为任何字符!
为 root@localhost 用户设置密码为 password 的值。

授予所有权限给特定用户和主机,并将密码改为先前指定的密码。
※在此,用户指定为root。
另外值得一提的是,在”GRANT ALL PRIVILEGES ON .”之后,您还可以指定可连接的数据库和表。
使用”GRANT ALL PRIVILEGES ON *.* TO root@主机名 IDENTIFIED BY ‘password’ WITH GRANT OPTION;”

如果要让root从192.168.0.1访问名为sampledb的数据库中的sampletable表的话,可以执行以下操作:
GRANT ALL PRIVILEGES ON sampledb.sampletable TO root@192.168.0.1 IDENTIFIED BY ‘password’ WITH GRANT OPTION;

刷新設定;刷新權限;刷新特權。

本次使用以下链接可下载的示例数据库作为练习用数据库。
下载world数据库的GZIP文件。
[https://dev.mysql.com/doc/index-other.html]

将下载的文件(world.sql)放置在适当的DB服务器位置上。我认为/tmp附近可以。
进入目标目录并使用以下命令解压缩。
gunzip world.sql.gz

只要在-p的位置上写入您自己指定的密码并运行,就可以导入数据库。
mysql -u root -p password < world.sql

确认是否成功导入到数据库中。
mysql -u root -p
※输入密码后执行下一个命令
show databases;
如果显示的数据库中有world,则表示没有问题。

在防火墙设置中允许Mariadb。确认执行以下三个命令后显示”success”。
firewall-cmd –add-service=mysql –zone=public
firewall-cmd –add-service=mysql –zone=public –permanent
firewall-cmd –reload

使用以下命令来确认服务列表中是否包含 MySQL:
firewall-cmd –list-all

◆建立网页服务器

1. 安装php
执行以下命令来安装Apache、php和用于连接数据库的驱动程序(mysql_pdo)。
yum -y install httpd php php-pdo_mysql

首先启动httpd。※enable命令是为了在系统启动时自动启动Apache。
systemctl start httpd
systemctl enable httpd

请确认httpd已经启动,使用以下指令:systemctl status httpd。

确认防火墙设置允许 HTTP。执行以下三个命令后,请确保成功显示。
firewall-cmd –add-service=http –zone=public
firewall-cmd –add-service=http –zone=public –permanent
firewall-cmd –reload

请确认以下命令中的“services”栏中是否包含了“http”:
firewall-cmd –list-all

通过检查Http的配置文件中的DocumentRoot和DirectoryIndex来确认。
cat /etc/httpd/conf/httpd.conf | grep DocumentRoot
DocumentRoot “/var/www/html”
默认情况下,指定了上述目录。如果指定了其他目录,后续的index.php将被放置在此处指定的目录中。
虽然还有其他被grep命令匹配的内容,但因为被注释掉了所以可以忽略。

cat /etc/httpd/conf/httpd.conf | grep DirectoryIndex
DirectoryIndex index.php index.html
⇒ 只要在最左边指定了index.php,就可以了。
即使在IfModule标签内也可能无效,所以只需确保在最外层有指定DirectoryIndex就可以了。

请执行以下命令,并复制粘贴下方的脚本:
vim /var/www/html/index.php

<?php
phpinfo();
?>

使用以下命令重启httpd,并确认没有错误。
systemctl restart httpd
systemctl status httpd

image.png
image.png

将index.php文件的内容编辑为以下内容。请将连接的源IP或主机名以及密码根据您自己的环境和设置的值进行更改并保存。

<?php
#phpinfo();

try{
    $db=new PDO("mysql:host=接続元IP or HOST名;dbname=world", "root", "password");
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    print "Connected<br>";
    #$db->query('USE world');
    $res=$db->query('SELECT * FROM city');

    while ($result=$res->fetch()) {
        print $result[0];
        print " : ";
        print $result[1];
        print " : ";
        print $result[2];
        print " : ";
        print $result[3];
        print " : ";
        print $result[4];
        print "<br>";
    }
   } catch(PDOException $e){
        print "Error happened. The messesage is following sentence : " .$e->getMessage();
    }

?>

使用以下命令重新启动httpd。如果没有错误,在自己的服务器上尝试访问并确认是否可以获取到数据库的内容。
systemctl restart httpd
systemctl status httpd

image.png
广告
将在 10 秒后关闭
bannerAds