Php 准备语句的MySQLi包装器

Php 准备语句的MySQLi包装器,php,mysqli,Php,Mysqli,很长一段时间以来,我一直在为我的数据库函数使用包装器类。几年前,我将其升级为使用mysqli,而不是折旧后的mysql函数,这使得该网站在升级PHP版本时完全违反了标准 在最近对包装器进行升级后,我编写了一个类,用于从mulit数组中执行准备好的statemtnts,以帮助保持整洁 我就是这样做的 index.php-测试文件 /* Set Parameters i - integer d - double s - string b - BLOB */ $pa

很长一段时间以来,我一直在为我的数据库函数使用包装器类。几年前,我将其升级为使用
mysqli
,而不是折旧后的
mysql
函数,这使得该网站在升级PHP版本时完全违反了标准

在最近对包装器进行升级后,我编写了一个类,用于从mulit数组中执行准备好的statemtnts,以帮助保持整洁

我就是这样做的

index.php-测试文件

/* Set Parameters
    i - integer
    d - double
    s - string
    b - BLOB
 */
 $params = array(
    array('s' => $_GET["id"]),
    array('i' => $_GET["two"])
 );

 $db->prepare("INSERT INTO `".$db->prefix."articles` SET `categoryID`= ? , `articleID`= ? ");
 $select2 = $db->execute($params);
 $db->close();     
您还可以使用不同的数据集重置
$params
数组,然后再次
$db->execute($params)
插入另一行

database.class.php

function prepare($sql) {
    $this->last_query = $sql; //Save query to show later on.
    $this->stmt = $this->conn->prepare($sql);
}

function close() {
    $this->stmt->close();
}

function execute($params) {
    $ident = '';
    $parameters = '';
    $vars = array();
    if($this->stmt) {
        foreach($params as $k => $v) {
            foreach($v as $a => $b) {
                $ident  .= $a;
                $vars[] .= $b;
                $parameters .= $a.' => '.$b.'<br>'; // For MySQL error reporting
            }
        }
        $this->stmt->bind_param( $ident , ...$vars );
        $this->parameters = $parameters;
        $this->stmt->execute();
        $result = $this->stmt->get_result();
        return $result;
    }
    else {
        if($this->conn->error) {
            $this->last_error = $this->conn->error;
            $sql = trim(preg_replace('/\s+/', ' ', $sql));
            $this->log_error("MySQL",$this->last_error." ☼ ".$sql);
        }
    }
    //$data = $result->fetch_all();
}
函数准备($sql){
$this->last_query=$sql;//保存查询以稍后显示。
$this->stmt=$this->conn->prepare($sql);
}
函数关闭(){
$this->stmt->close();
}
函数执行($params){
$ident='';
$parameters='';
$vars=array();
如果($this->stmt){
foreach($k=>v的参数){
foreach($v为$a=>$b){
$ident.=$a;
$vars[].=$b;
$parameters.=$a.=>'.$b.
';//用于MySQL错误报告 } } $this->stmt->bind_参数($ident,$vars); $this->parameters=$parameters; $this->stmt->execute(); $result=$this->stmt->get_result(); 返回$result; } 否则{ 如果($this->conn->error){ $this->last_error=$this->conn->error; $sql=trim(preg_replace('/\s+/',''$sql)); $this->log_error(“MySQL”,$this->last_error。“☼ ".$sql); } } //$data=$result->fetch_all(); }
我的问题是:

  • 我的方式会让它慢下来吗

  • 有人能想出更好的解决方案并保持整洁吗?我喜欢在数组中排列信息的整洁;不是说这是最好的解决方案,但它确实有效。我还没有找到一个好的解决方案来保持事情完全有序

  • 你认为这条路线有什么缺点吗


  • 我工作的网站都将运行PHP7.0(或至少PHP5.7,直到我可以升级到新版本)。

    放慢速度…从什么开始?与什么相比?“整洁”、“更好”、“很好”、“完全有条理”“所有情绪化的、主观的、没有明确要求的术语我认为这应该转移到代码审查。它看起来不错,但我会摆脱所有这些错误报告。启用MySQLi异常对您来说应该足够了。这个问题可能会在这里结束,但如果您将其发布在coderevew@stackexchange. 虽然我已经有了。此功能可以简化得多: