Odpowiedzi z func_get_args() będą działać poprawnie dla parametrów innych niż referencyjne. Istnieje jednak pewna sztuczka, aby uzyskać parametry przekazywane przez odniesienie do działania. Ponadto, nie jest to z technicznego punktu widzenia funkcja, która akceptuje parametry nieograniczoną liczbę, ale po prostu dowolną dużą liczbę, powiedzmy sto.
To, co możesz zrobić, to zdefiniować funkcję, która pobiera dużą liczbę argumentów i ma domyślną wartość null. Następnie wewnątrz tej funkcji dołącz każde niezerowalne odwołanie do tablicy, która byłaby następnie używana do wywoływania * bind_param() * przy użyciu * call_user_func_array() *.
function my_bind_param(&$stmt, $types, &$arg1, &$arg2 = null, &$arg3 = null, ...)
{
$vars = array($types);
$vars[] = $arg1;
if ($arg2 != null)
$vars[] = &$arg2;
if ($arg3 != null)
$vars[] = &$arg3;
...
if (!call_user_func_array(array($stmt, "bind_param"), $vars))
{
if ($stmt->errno == 0)
return array(-1, "Unknown error binding parameters.");
else
return array(-1, "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error);
}
return array(0, "");
}
Prawdziwą sztuką jest to, że nie chcą, aby napisać tę rzecz ręcznie. Po prostu zrób kolejny skrypt, który wypisze treść tej funkcji (wszystko pomiędzy nawiasami) jako * my_bind_param_body.php *. Następnie, po prostu zdefiniuj nagłówek funkcji w pliku głównym i dołącz treść do definicji tej funkcji. tj
function my_bind_param(&$stmt, $types, &$arg1, &$arg2 = null, &$arg3 = null, ...)
{
return include "my_bind_param_wrapper_body.php";
}
nie można zrobić bez uciążliwego wysiłków. Proponuję albo zbudować zapytanie w zwykły sposób, albo przejść do PDO, jeśli chcesz natywnie przygotowane instrukcje za wszelką cenę. Mają bindValue, mind you –
Dzięki za informacje. Niestety, PDO wydaje się być przesadą, z jeszcze większym wysiłkiem i podstawą, w porównaniu do pisania tylko moich prostych rzeczy. –
Dla prostych rzeczy możesz użyć biblioteki z mojego userinfo.To naprawdę proste. –