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);