我在写一个会计网站,里面有很多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()将返回结果对象”...