在MySQLi中获取可变长度预处理语句的结果

时间:2013-09-14 20:48:21

标签: php mysqli

我在写一个会计网站,里面有很多MySQL语句。为了防止SQL注入,我使用预备语句来处理用户输入的任何数据。

为了防止必须编写准备和绑定语句的步骤,我有以下功能:

function executeSql($mysqli,$query_string,$params=null,$paramtypes=null){
    $nr_params=strlen($paramtypes);
    $query_type = substr($query_string,0,3);
    $stmt = $mysqli->prepare($query_string);
    $queryParams[] = $paramtypes;
    $counter=1;
    if($nr_params>1){
        while($counter<=$nr_params){
             $queryParams[$counter]=&$params[$counter-1];
             $counter++;
        }
    } else {
        $queryParams[1]=&$params;
    }
    // Actual binding of the statement. Taking into account a variable numbers of '?' in the query string.
    call_user_func_array(array($stmt,'bind_param'),$queryParams);
    // Execution of the statement
    $stmt->execute();
    // Part where i'd like to have a substitute for:
    $result = $stmt->get_result();
    return $result;
    }

在最后一部分中,我想返回结果,因为然后使用结果我可以处理每一行。问题是生成服务器上没有安装mysqlnd驱动程序,因此无法使用函数$ stmt-&gt; get_result()。我试图将结果绑定到变量中,但是每次查询都会返回不同数量的列。

任何人都知道如何解决这个问题?

总结(回应评论):

如何在无法使用$ stmt-&gt; get_result();

的情况下检索已执行的MySQLi语句的结果对象

亲切的问候,

EJG

PS我知道代码不完美,例如如果字符串用作绑定到语句的变量,但很容易修复。

更新: 我遇到了函数$ stmt-&gt; result_metadata();虽然假设函数名称仅建议元数据,但php文档声明: “如果传递给mysqli_prepare()的语句是生成结果集的语句,mysqli_stmt_result_metadata()将返回结果对象”...

0 个答案:

没有答案