【发布时间】:2014-08-18 15:13:57
【问题描述】:
我正在尝试构建一个函数,允许我在我的代码中抽象 mysqli 函数的使用。目前我有一个使用标准 SQL 的工作版本(没有准备好的语句)。
function mySqlQueryToArray($con, $sql){
// Process SQL query
$result = mysqli_query($con, $sql);
if(mysqli_error($con)){
out($sql . "\n");
exit("ERROR: MySQL Error: " . mysqli_error($con));
}
// Put result into 2D array
$output = array();
while($row = mysqli_fetch_assoc($result)) {
array_push($output, $row);
}
return $output;
}
现在我正在尝试将该代码转换为可以使用准备好的语句的东西,但我的研究表明,在使用准备好的语句时,您需要使用 mysqli_stmt::bind_result 将每一列绑定到不同的变量,这会导致问题,因为要点该功能的作用是为任意 SQL 查询工作。
我的主要问题是:有没有办法在二维数组中打印出 SQL 查询的整个输出,就像上面的函数使用准备好的语句一样?
这是我当前使用准备好的语句的代码,它包含除了 bind_result 之外的所有内容。
//Creates a MySQL Query, gets the result and then returns a 2D array with the results of the query
function mySqlQueryToArray($con, $sql, $params){
// Prepare SQL query
$stmt = $con->prepare($sql);
if(mysqli_error($con)){
echo "$sql=>\n" . print_r($params, true) . "\n";
exit("$sql=>\n" . print_r($params, true) . "\nERROR: MySQL Error: " . mysqli_error($con));
}
// Bind parameters
foreach($params as $param){
$type = "s";
if(gettype($param) == 'integer'){
$type = "i";
}
$stmt->bind_param($type, $param);
}
//execute query
$stmt->execute();
// Put result into 2D array
$output = array();
// ??? need to bind results and get them into an array somehow
//close prepared statement
$stmt->close();
return $output;
}
【问题讨论】:
-
用 mysqli 获取实际查询是不可能的
-
我认为在这类事情上使用 PDO 而不是 mysqli 会更容易。在处理准备好的语句时,您将拥有更大的灵活性。
标签: php mysqli prepared-statement