最近MySQLiプリペアドステートメントを使用し始めました。私は単純なselect文のために必要だったコードの行の数が好きではありませんでした。そこで私はラッパー関数を作成しました。以下の質問の下のコードを見てください。 注:get_results()またはPDOは私のオプションではありません。MySQLi Prepared statements - SELECTのラッパー関数
私の質問は以下のとおりです。
それは著しくパフォーマンスが低下するのでしょうか?
結果配列を使用するため、メモリがより多く消費されますか?
- 戻り前に$ stmt-> close()を実行すると問題が発生しますか?たとえば、結果の配列データもメモリから解放されているとしますか?
- DB接続を閉じる以外は何かを閉じるか解放する必要がありますか?
- この機能に関するその他の問題はありますか、それとも改善する可能性がありますか?
コード:例えばこのように使用
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 />";
}
あなたのPHPのバージョンは何ですか? –
PHPバージョン5.6.27 – Danie