invincible-tech-systems / easeampmysql
一个简单且安全的PHP库,用于以异步和非阻塞方式在MySQL数据库上执行SQL查询。提供了准备SQL语句和执行语句的独立方法(以方便准备语句的缓存)以及在一个单独的方法中一起执行,所有这些均基于Amphp,一个PHP中的事件驱动并发框架及其Amphp\Mysql包。
Requires
- php: >=7.2
- amphp/mysql: ^2.1.1
Requires (Dev)
- php: >=7.2
- amphp/mysql: ^2.1.1
README
这是一个简单且安全的PHP库,用于以异步和非阻塞方式在MySQL数据库上执行SQL查询。提供了准备SQL语句和执行语句的独立方法(以方便准备语句的缓存)以及在一个单独的方法中一起执行,所有这些均基于Amphp,一个PHP中的事件驱动并发框架及其Amphp\Mysql包。
为什么选择EaseAmpMysql?
以简单和安全的方式在MySQL/MariaDB上执行SQL查询,防止SQL注入始终是一件重要的事情。另一方面,以异步和非阻塞的方式执行SQL查询可以提高数据库查询的响应速度。此库基于Amphp\MySQL包。
优点
- 使用准备好的语句
- 目前支持MySQL/MariaDB连接对象
- 支持命名参数语法,类似于PDO语法
- 虽然对输入进行清理总是一个好习惯,但提供给
runPreparedQuery
或executeQuery
方法的值通过安全执行相应的DB查询来达到目的 - 有必要的检查来查找数据库连接错误,并在准备数据库查询时重新连接到数据库
入门
使用Composer,运行
composer require invincible-tech-systems/easeampmysql:^1.0.7
注意,vendor
文件夹和vendor/autoload.php
脚本是由Composer生成的;它们不是PDOLight的一部分。
要包含库,
<?php require 'vendor/autoload.php'; use InvincibleTechSystems\EaseAmpMysql\EaseAmpMysql;
由于Amphp/dns是此库的依赖之一,为防止由于诸如open_basedir限制/无法访问Linux服务器上的/etc/resolv.conf文件等原因可能发生的递归DNS服务器解析错误,请在您的代码中包含以下行:
use \InvincibleTechSystems\EaseAmpMysql\CustomAmphpDnsConfigLoader; $customAmphpDnsConfigValues = ["208.67.222.222:53", "208.67.220.220:53","8.8.8.8:53","[2001:4860:4860::8888]:53"]; $CustomAmphpDnsConfigLoader = new CustomAmphpDnsConfigLoader($customAmphpDnsConfigValues, 5000, 3); \Amp\Dns\resolver(new \Amp\Dns\Rfc1035StubResolver(null, $CustomAmphpDnsConfigLoader));
注意:如果从EaseAmyMysqlRedis(https://github.com/invincible-tech-systems/easeamp-mysql-redis)或EaseAmpRedis(https://github.com/invincible-tech-systems/easeamp-redis)等其他Amphp/dns依赖库加载类似的自定义DNS配置加载器,请跳过包含上述内容。
为了连接到数据库,您需要通过传递数据库凭据作为参数来初始化EaseAmpMysql
类,如下所示(服务器主机名、用户名、密码、数据库名)
$dbHost = "localhost"; $dbUsername = "database_username"; $dbPassword = "database_password_value"; $dbName = "database_name"; $dbConn = new EaseAmpMysql($dbHost, $dbUsername, $dbPassword, $dbName);
要执行SQL查询,如果准备和执行语句在一个单独的方法中,则必须调用带有SQL查询和相应的值(作为关联数组)以及CRUD操作类型作为第三个参数的executeQuery
方法。
注意:CRUD操作类型的值包括:insertWithIntegerAsPrimaryKey | update | delete | selectSingle | selectMultiple
`INSERT Query (with Named Parameters as placeholders):` $query = "INSERT INTO `site_members`(`sm_firstname`, `sm_lastname`) VALUES (:sm_firstname,:sm_lastname)"; $values_array = array(':sm_firstname' => 'First Name',':sm_lastname' => 'Last Name'); $queryResult = $dbConn->executeQuery($query, $values_array, "insertWithIntegerAsPrimaryKey");
`UPDATE Query (with Named Parameters as placeholders):` $query = "UPDATE `site_members` SET `sm_firstname`=:sm_firstname, `sm_lastname`=:sm_lastname WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_firstname' => 'Srirama',':sm_lastname' => 'D',':sm_memb_id' => 2); $queryResult = $dbConn->executeQuery($query, $values_array, "update");
`SELECT Query (with Named Parameters as placeholders):` $query = "SELECT * FROM `site_members` WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_memb_id' => 1); $queryResult = $dbConn->executeQuery($query, $values_array, "selectSingle");
`SELECT ALL Query (with Named Parameters as placeholders):` $query = "SELECT * FROM `site_members`"; $values_array = array(); $queryResult = $dbConn->executeQuery($query, $values_array, "selectMultiple");
`DELETE Query (with Named Parameters as placeholders):` $query = "DELETE FROM `site_members` WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_memb_id' => 4); $queryResult = $dbConn->executeQuery($query, $values_array, "delete");
要执行SQL查询,如果准备和执行语句在两个不同的方法中,则必须依次调用prepareQuery
和runPreparedQuery
方法,使用prepareQuery
方法准备的SQL查询和准备好的语句(以及相应的值,作为关联数组)以及CRUD操作类型输入必须提供给runPreparedQuery
以执行查询。
注意:CRUD操作类型的值包括:insertWithIntegerAsPrimaryKey | update | delete | selectSingle | selectMultiple
`INSERT Query (with Named Parameters as placeholders):` $query = "INSERT INTO `site_members`(`sm_firstname`, `sm_lastname`) VALUES (:sm_firstname,:sm_lastname)"; $values_array = array(':sm_firstname' => 'First Name',':sm_lastname' => 'Last Name'); $preparedQuery = $dbConn->prepareQuery($query); $queryResult = $dbConn->runPreparedQuery($preparedQuery, $values_array, "insertWithIntegerAsPrimaryKey");
`UPDATE Query (with Named Parameters as placeholders):` $query = "UPDATE `site_members` SET `sm_firstname`=:sm_firstname, `sm_lastname`=:sm_lastname WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_firstname' => 'Srirama',':sm_lastname' => 'D',':sm_memb_id' => 2); $preparedQuery = $dbConn->prepareQuery($query); $queryResult = $dbConn->runPreparedQuery($preparedQuery, $values_array, "update");
`SELECT Query (with Named Parameters as placeholders):` $query = "SELECT * FROM `site_members` WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_memb_id' => 1); $preparedQuery = $dbConn->prepareQuery($query); $queryResult = $dbConn->runPreparedQuery($preparedQuery, $values_array, "selectSingle");
`SELECT ALL Query (with Named Parameters as placeholders):` $query = "SELECT * FROM `site_members`"; $values_array = array(); $preparedQuery = $dbConn->prepareQuery($query); $queryResult = $dbConn->runPreparedQuery($preparedQuery, $values_array, "selectMultiple");
`DELETE Query (with Named Parameters as placeholders):` $query = "DELETE FROM `site_members` WHERE `sm_memb_id`=:sm_memb_id"; $values_array = array(':sm_memb_id' => 4); $preparedQuery = $dbConn->prepareQuery($query); $queryResult = $dbConn->runPreparedQuery($preparedQuery, $values_array, "delete");