Binden Sie mehrere Parameter in eine mysqli-Abfrage ein

Lesezeit: 2 Minuten

Binden Sie mehrere Parameter in eine mysqli Abfrage ein
Amy Neville

Im Moment muss ich die folgende Struktur verwenden, um mit der Bindung mehrerer Parameter in eine mysqli-Abfrage fertig zu werden:

if ($words_total == 1)
{
    $statement -> bind_param("s", $words[0]);
}
else if ($words_total == 2)
{
    $statement -> bind_param("ss", $words[0], $words[1]);
}
else if ($words_total == 3)
{
    $statement -> bind_param("sss", $words[0], $words[1], $words[2]);
}

//and so on....

Ich ermittle die Anzahl der Fragezeichen mit dem folgenden Code und füge ihn in meine Abfrage ein:

$marks = "";
for($i = 1; $i<=$words_total; $i++) {
    if ($i == $words_total)
    {
        $marks .= "?";
    }
    else
    {
        $marks .= "?,";
    }
}

Meine Frage ist sicherlich, dass es eine Möglichkeit geben muss, so viele Eingaben in die Abfrage zu verarbeiten, wie ich dynamisch benötige. Hardcodierung der bind_param() scheint eine wirklich schlechte Art zu sein, damit umzugehen.

Ich verwende die PHP-Version 5.4.10

1646900046 977 Binden Sie mehrere Parameter in eine mysqli Abfrage ein
Ihr gesunder Menschenverstand

Leider akzeptiert bind_param() standardmäßig kein Array anstelle von separaten Variablen. Seit PHP 5.6 gibt es jedoch eine großartige Verbesserung, die den Zweck erfüllen wird.

Um eine beliebige Anzahl von Variablen in eine MySQL-Abfrage einzubinden, benötigen Sie eine Argument Entpackoperator. Es wird die Bedienung so einfach und reibungslos wie möglich machen.

Zum Beispiel, um ein PHP-Array mit einem mysql zu verwenden IN() Operator benötigen Sie den folgenden Code

// our array
$array = ['a','b','c']; 

// create an SQL query with placeholders and prepare it
$in    = str_repeat('?,', count($array) - 1) . '?'; //  returns ?,?,?...
$sql   = "SELECT name FROM table WHERE city IN ($in)"; 
$stmt  = $mysqli->prepare($sql);

// create the types string dynamically and bind an array
$types = str_repeat('s', count($array)); // returns sss...
$stmt->bind_param($types, ...$array); 

// execute and fetch the rows
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$data = $result->fetch_all(MYSQLI_ASSOC); // fetch the data   

  • Vielen Dank dafür – ich war buchstäblich verzweifelt über meine hässliche Lösung für dieses Problem. Ich stimme zu, dass das Melden von Fehlern eine meiner Schwächen ist, über die ich die Zeit aufwenden muss, um mehr darüber zu erfahren. Ich habe PHP erst vor etwa 2 Monaten gelernt, also ging es bisher nur darum, so viel wie möglich zu tun. Jetzt denke ich, ich muss mich vielleicht mehr darauf konzentrieren, die Dinge so gut wie möglich zu machen!! Umarmungen und danke!

    – Amy Neville

    26. Juli 2013 um 13:03 Uhr

987040cookie-checkBinden Sie mehrere Parameter in eine mysqli-Abfrage ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy