Skip to main content
deleted 1622 characters in body
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

Updated code:

class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);

Updated code:

class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);
Fixed code by suggestion
Source Link
class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        if(get_class($inDb) !== 'mysqli')
            throw new \InvalidArgumentException('Input parameter is not mysqli-connection', -1);
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);
class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        if(get_class($inDb) !== 'mysqli')
            throw new \InvalidArgumentException('Input parameter is not mysqli-connection', -1);
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);
class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);
Added current code
Source Link

Updated code:

class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        if(get_class($inDb) !== 'mysqli')
            throw new \InvalidArgumentException('Input parameter is not mysqli-connection', -1);
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);

Updated code:

class ParamMysqli
{
    public function __construct(mysqli $inDb)
    {
        if(get_class($inDb) !== 'mysqli')
            throw new \InvalidArgumentException('Input parameter is not mysqli-connection', -1);
        $this->db = $inDb;
    }

    public $db = null;
    public function queryParam($sql)
    {
        preg_match_all("/{(\d{1,}:.)}/", $sql, $matches);

        $noStripped = $matches[0];
        $sql = str_replace($noStripped, "?", $sql);
        $params = $matches[1];

        $statement = $this->db->stmt_init();
        $statement = $this->db->prepare($sql);
            if(!$statement)
                die("Error at prepare: " . $this->db->error);

        if(count($params) > 0)
        {
            $queryTypes = '';
            $queryParams = Array();
            $arguments = func_get_args();
            array_shift($arguments);

            foreach($params as $param)
            {
                $lp = explode(":", $param);
                $queryTypes .= $lp[1];
                $queryParams[] = &$arguments[$lp[0]];
            }

            $query = Array();
            $query[0] = $queryTypes;
            $query = array_merge($query, $queryParams);

            $stateRet = call_user_func_array(array($statement, 'bind_param'), $query);

            if(!$stateRet)
                die("Error at parameterbindning: " . $statement->error);
        }
        $statement->execute() or die("Error at execute: " . $statement->error);
        $ret = $statement->get_result();
        $statement->close();
        return $ret;
    }
}

//Example usage is as before
$__db = new mysqli(HOST, USER, PASS, DB);
$indb = new ParamMysqli($__db);
$result = $indb->queryParam("SELECT * FROM users WHERE userid = {0:i}", 1);
Added example code
Source Link
Loading
Rollback to Revision 2
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238
Loading
Edited code to reflect suggestions
Source Link
Loading
added 447 characters in body; edited title
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238
Loading
Source Link
Loading