noahheck/e_mysqli

默认Mysqli类的替代品,允许查看带有参数插入字符串的参数化查询

2.1.1 2018-04-13 01:39 UTC

This package is auto-updated.

Last update: 2024-09-20 04:28:59 UTC


README

默认Mysqli类的替代品,允许查看带有参数插入字符串的参数化查询

查看变更日志

用法

提供与PDO子项目类似的功能

E_PDOStatement

在语句参数被插入后无法查看服务器上将要执行的查询的完整版本可能会很令人沮丧。

EMysqli旨在通过为开发者提供查看服务器上执行的查询示例的能力来减轻这种负担

$query 		= "INSERT INTO registration SET name = ?, email = ?";
$stmt 		= $mysqli->prepare($query);

$name 		= $_POST['name'];
$email 		= $_POST['email'];

$stmt->bind_param("ss", $name, $email);

$stmt->execute();

echo $stmt->fullQuery;

结果将是

INSERT INTO registration SET name = 'John Doe', email = 'john.doe@example.com'

当正确使用时,插入的值将根据数据库服务器上使用的字符集适当地转义

INSERT INTO registration SET name = 'Sue O\'Reilly', email = 'sue.o@example.com'

也可以在不执行查询的情况下查看插入的查询字符串

$query 		= "INSERT INTO registration SET name = ?, email = ?";
$stmt 		= $mysqli->prepare($query);

$name 		= $_POST['name'];
$email 		= $_POST['email'];

$stmt->bind_param("ss", $name, $email);

$fullQuery 	= $stmt->interpolateQuery();// INSERT INTO registration SET name = 'John Doe', email = 'john.doe@example.com'

进一步增强

EMysqli执行工作的方式产生的(幸运?)副作用也允许你单独绑定多个参数,如果你的查询字符串是在单独的方法/函数调用中生成的,这将很有帮助。

这是通过单独绑定参数来实现的

$name 		= $_POST['name'];
$email 		= $_POST['email'];

$stmt->bind_param("s", $name);
$stmt->bind_param("s", $email);

注意

使用这两种方法中的任何一种都会将绑定参数存储为它们运行时变量的引用,从而避免了需要重新绑定参数,这是mysqli处理绑定参数的默认方法。

$name 		= "John Doe";
$email 		= "john.doe@example.com";

$stmt->bindParam("s", $name);
$stmt->bindParam("s", $email);

$stmt->execute(); // INSERT INTO registration SET name = 'John Doe', email = 'john.doe@example.com'

$name 		= "Sue O'Reilly";
$email 		= "sue.o@example.com";

$stmt->execute(); // INSERT INTO registration SET name = 'Sue O\'Reilly', email = 'sue.o@example.com'

安装

通过composer安装

composer require noahheck/e_mysqli

配置

E_mysqli扩展了mysqlimysqli_stmt类。您的mysqli对象创建过程只需更新为生成一个EMysqli\EMysqli的实例即可

<?php

require_once "path/to/vendor/autoload.php";

$mysqli 	= new EMysqli\EMysqli($dbHost, $dbUser, $dbPassword, $dbName);

就是这样。您的$mysqli对象应该像以前一样工作。

反馈请求

E_PDOStatement项目已经收到了一些好的反馈,一个常见的请求是向仍在使用mysqli的用户提供相同或类似的功能。尽管我没有使用myslqi扩展的实际经验,但我已经研究了这可能如何实现,这就是我设法搞出来的。

由于我没有生产质量的应用程序代码来测试这个扩展,因此对于生产环境中性能的任何反馈都将受到欢迎。当然,欢迎提出错误、新的功能请求和pull请求。