Ich habe vor kurzem begonnen, MySQLi vorbereitete Anweisungen zu verwenden. Ich mochte nicht, wie viele Codezeilen nur für eine einfache SELECT-Anweisung benötigt wurden. Also habe ich eine Wrapper-Funktion erstellt, siehe den Code unter den Fragen unten. Hinweis: get_results() oder PDO ist keine Option für mich.MySQLi vorbereitete Anweisungen - Wrapper-Funktion für SELECT
Meine Fragen sind:
Wird es merklich die Leistung verlangsamen?
Wird es aufgrund der Verwendung des Ergebnisarrays speicherintensiver sein?
- Wird die $ stmt-> close() vor der Rückkehr irgendwelche Probleme verursachen? Zum Beispiel könnten die Ergebnis-Array-Daten auch aus dem Speicher freigegeben werden?
- Muss ich irgendetwas anderes schließen oder freigeben (außer die db-Verbindung zu schließen)?
- Sehen Sie weitere Probleme mit der Funktion oder könnte sie verbessert werden?
Code:
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;
}
}
wie folgt verwendet zum Beispiel:
$users = DatabaseHelper::select($conn, "SELECT name,username FROM users WHERE id > ?", "i", array(30));
foreach ($users as $row){
echo $row['username'] . " ". $row['name'] . "<br />";
}
Was ist Ihre PHP-Version? –
PHP Version 5.6.27 – Danie