我最近开始使用MySQLi编写的语句。我不喜欢只有一个简单的select语句需要多少行代码。所以我创建了一个包装函数,请参阅下面的问题以下代码。 注意:get_results()或PDO不适合我。
我的问题是:
它会显着降低性能吗?
由于使用了结果数组,是否会占用更多内存?
代码:
class DatabaseHelper{
static function select($con, $query, $formats, $params){
$a_params = array();
$param_type = '';
$n = count($formats);
for($i = 0; $i < $n; $i++) {
$param_type .= $formats[$i];
}
$a_params[] = & $param_type;
for($i = 0; $i < $n; $i++) {
$a_params[] = & $params[$i];
}
$stmt = $con->prepare($query);
call_user_func_array(array($stmt, 'bind_param'), $a_params);
$stmt->execute();
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$columns[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $columns);
while ($stmt->fetch()) {
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
$stmt->close();
return $results;
}
}
就像这样使用:
$users = DatabaseHelper::select($conn, "SELECT name,username FROM users WHERE id > ?", "i", array(30));
foreach ($users as $row){
echo $row['username'] . " ". $row['name'] . "<br />";
}
答案 0 :(得分:0)
它会显着降低性能吗?
没有
由于使用了结果数组,它是否会占用更多内存?
不,只要您选择合理数量的数据。在现代应用程序中,您必须首先选择所有数据,因为业务逻辑应与显示逻辑分开。
返回前的$ stmt-&gt; close()会导致任何问题吗?例如,结果数组数据是否也可以从内存中释放出来?
为什么不试着看?
我是否需要关闭或释放任何其他内容(关闭数据库连接除外)?
你也不必关闭声明。
您是否看到该功能有任何其他问题或是否可以改进?
因此,理想情况下,您可以通过这种方式调用查询
$users = DatabaseHelper::getAll("SELECT name,username FROM users WHERE id > ?", [30]);
foreach ($users as $row){
echo $row['username'] . " ". $row['name'] . "<br />";
}
其中getAll()方法在内部使用query()方法执行查询,然后获取所有结果。同样,您可能希望编写getRow()和getOne()方法