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
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