ubuntu(kali linux)下PHP 7.4 与mysql(mariaDB)连接

    科技2024-04-23  77

    PHP7以上版本已经废除了mysql函数库,故mysql_connect()函数已经无法使用。新的函数库mysqli及PDO可以完全取代该库。本文主要介绍两种库函数下,PHP与mysql的连接及遇到的问题。

    经实验,所有内容在ubuntu18.04.3下也完全可以运行。

    安装问题

    PHP与mysql的连接使用apache+PHP+mysql,由于kali中已经预先安装好了各个部分,具体细节见参考资料:Kali安装Apache、MySQL、PHP。这里谈谈安装时需要注意问题,apache及mysql的安装一般不会出现问题,重点在PHP的安装。按上参考资料配置完成后,在/var/www/html文件夹下建立新文件index.php,内容如下:

    <?php phpinfo(); ?>

    开启apache,默认是开启的,如果不放心可以运行下列命令:

    /etc/init.d/apache2 start

    出现以下结果: 说明服务器已经开启,浏览器中输入地址:http://localhost/index.php,出现正常php配置信息: 页面中提供了PHP配置的详细信息及其已经安装的扩展模块,需要强调扩展模块!!!因为这可能造成一个非常常见的问题:PHP信息页面正常显示,静态PHP页面也可以显示,动态交互页面却是空白!,这往往是由于PHP对应的扩展模块没有安装导致的。如本次所需要用到的模块是mysqli和PDO(这两个库是独立的,只不过这里使用两个库分别实现PHP与mysql的连接),但是在最新的PHP版本中却不会默认安装mysqli库,这导致PHP页面中的mysql相关的函数不会执行,形成页面空白。查看PHP已经安装的扩展模块有两个方法:一是上面浏览器中显示的PHP配置信息,查找有关扩展模块 二是直接命令行输入:

    php -m

    会列出所安装的扩展包: 这里我已经安装好了,如过没有这些模块,可以通过下列命令安装(更详细资料参考2):

    sudo apt-get install php7.4-mysqli //这里我的php版本是7.4.9 sudo apt-get install php7.4-PDO

    至此,所有配置已经完成。

    MySQL创建用户与授权

    kali下mysql可以免密登录,默认为root用户,而在ubuntu下则需要使用更加详细的命令:

    mysql #kali下 -------------------------------- mysql -u root -p #kali下和ubuntu下均可,更正式

    kali下登录: 或者(ubuntu、kali均可,推荐) 这里最常见的一个问题就是报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock’ 网上有各种解决问题的办法,有时候只要重启mysql便可解决这个问题:

    systemctl restart mysql

    创建用户

    数据库操作命令大小写均可。 进入Mysql后,相关用户创建及授权命令如下:

    #drop database kali; #由于已经完成数据库的操作,数据库已经存在,这里将其删除,重新演示 show databases; #列出当前存在的数据库 create database kali; #创建数据库kali use kail; #使用kali #drop user 'lee'@'localhost'; #删除当前用户lee create user 'lee'@'localhost' identified by '123'; #创建新用户,这条命令涉及PHP代码,下面详细说 select user,host,password from mysql.user; #列出所有用户、所属主机、密码(默认经过加密)

    对使用的关键语句:**create user ‘lee’@‘localhost’ identified by ‘123’;**说明: 基本格式:create user ‘username’@‘host’ identified by ‘password’; username:创建的用户名; host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%; password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器;

    创建好的用户信息会放在mysql.user中。

    用户授权

    对所创建的新用户进行授权,授权指的是用户可以对数据库进行的操作,如增删改查等。命令如下:

    grant all privileges on kali.* to 'lee'@'localhost' identified by '123' with grant option; flush privileges; #权限刷新

    授权语句格式: grant privileges on databasename.tablename to ‘username’@‘host’ 说明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL databasename:数据库名 tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示。

    更详细权限相关操作见参考资料3:MySQL创建用户与授权。其实到此已经可以检测PHP与mysql的连接,为了更清楚地表示,可以将数据库中的内容打印在页面。首先创建内容。

    数据库内容创建

    基本数据库操作,命令如下:

    show tables; #显示当前数据库下所有列表 create table users( -> id int(10), -> username varchar(7) ); #创建table,赋予属性 describe users; #描述表 insert into users value (1,'paradox'); #插入数据 select * from users; #显示数据

    PHP7连接mysql

    PHP7中已经废除mysql库,想要建立PHP与mysql的交互,可以通过mysqli及PDO库函数进行。关于mysql、mysqli及PDO的区别与使用,本文不作具体说明。详细地可以阅读参考资料4-6。

    PHP mysqli与mysql交互

    mysqli有面向对象和面向过程两种。在文件夹/var/www/html/下建立文件mysqli.php,内容如下:

    <?php /* 面向对象风格,格式及参数说明: $mysqli = new Mysqli($serve,$username,$password,$dbname); $serve:所使用的用户主机名称,这里是本地用户localhost $username: 数据库用户名,上面设置为lee $password:用户对应的密码 $dbname:所使用的数据库。默认的话,会调用上一个打开的数据库 */ $mysqli = new mysqli("localhost", "lee", "123", "kali"); if(!$mysqli) { echo"database error"; }else{ echo"php env successful"; } $mysqli->close(); ?>

    浏览器中输入地址:http://localhost/mysqli.php,连接成功。

    PHP PDO与mysql交互

    PDOPDO比MySQLi最大的优点就是PDO支持很多种数据库,而MySQLi只支持MySQLi。当程序以后想从mysql换成sql server或者oracle时,PDO的优势就能体现出来了,因为换数据库对于程序接口是透明的,php代码改动很小,如果你是用MySQLi,那么所有用到数据库的地方都要重写。 PDO建立连接的方法有三种:通过参数形式连接数据库;通URI连接数据库;通过配置文件形式连接数据库,后两种需要配置文件,这里采用第一种。同样,在/var/www/html/下建立文件pdo.php,内容如下:

    <?php $dbms='mysql'; $dbName='kali'; $user='lee'; $pwd='123'; $host='localhost'; $dsn="$dbms:host=$host;dbname=$dbName"; $pdo=new PDO($dsn,$user,$pwd); echo "PDO连接MySQL成功"; ?>

    这里参数含义同上,只是要注意$dsn的格式。在浏览器输入地址:http://localhost/pdo.php,连接成功如下:

    当然也可以对数据库的内容进行输出,建立文件pdoo.php,内容如下:

    <?php header("Content-type:text/html;charset=utf-8"); $dns = 'mysql:host=localhost;dbname=kali'; $username = 'lee'; $password = '123'; try{ // PDO连接数据库若错误则会抛出一个PDOException异常 $PDO = new PDO($dns,$username,$password); $result = $PDO->query('select * from users'); $data = $result->fetchAll(PDO::FETCH_ASSOC); // PDO::FETCH_ASSOC表示将对应结果集中的每一行作为一个由列名索引的数组返回 print_r($data); } catch (PDOException $error){ echo 'connect failed:'.$error->getMessage(); } ?>

    浏览器中输入:http://localhost/pdoo.php,显示数据库内容: 这就是前面在数据库中插入的数据: 奇怪的是,有时代码完全正确,但是浏览器却是空白,此时可能需要重启PHP。这里具体的问题在哪不是很清楚。

    本文是在学习SQL注入时,对防止注入的一些PHP转义函数的补充学习,有错误的地方欢迎指出。

    参考资料:

    Kali安装Apache、MySQL、PHPkali安装php7.4MySQL创建用户与授权mysql与mysqli的区别PDO和MySQLi区别与选择mysql数据库的PDO连接方式PHP7连接数据库的方法
    Processed: 0.028, SQL: 9