Salve, volevo sapere se qualcuno aveva riscontrato qualche problema con la funzione call_user_func_array.
Vi spiego, l'ho utilizzata su un sito web interno sulla mia rete e fino ad ora ha girato su ambiente Windows con PHP 5.2.9.
Viene utilizzata per le query parametrizzate dove non so quanti parametri mi arriveranno, vi faccio un esempio su una query parametrizzata senza e con call_user_func_array.
Senza:
Codice PHP:
$db_user="root";
$db_password="xxx";
$db_host="localhost";
$mysqli = new mysqli($db_host, $db_user, $db_password, "database");
$query = "select id from tabella where nome like ?";
$tipi="s";
$valori[]="a%";
$stmt = $mysqli->prepare($query);
$stmt->bind_param($tipi, $valori[0]); //Senza la funzione
$stmt->execute();
$stmt->bind_result($id);
while($stmt->fetch()){
echo($id."
");
}
$mysqli->close();
Con:
Codice PHP:
$db_user="root";
$db_password="xxx";
$db_host="localhost";
$mysqli = new mysqli($db_host, $db_user, $db_password, "database");
$query = "select id from tabella where nome like ?";
$tipi="s";
$valori[]="a%";
$stmt = $mysqli->prepare($query);
call_user_func_array(array($stmt, "bind_param"), array_merge(array($tipi),$valori)); //Con la funzione
$stmt->execute();
$stmt->bind_result($id);
while($stmt->fetch()){
echo($id."
");
}
$mysqli->close();
Entrambe i codici sul pc Windows producono lo stesso risultato, invece su un pc con Ubuntu Server e PHP 5.3.2 la versione con call_user_func_array non produce nessun risultato.
Dopo vari tentativi ho constatato che la prima parte della funzione (array($stmt, "bind_param")) funziona bene, mentre la seconda parte, quella che si occupa del passaggio dei parametri, non funziona, ovvero non passa nulla.
Il bello è che non genera neanche errore, per lui va bene così... mah... voi ne sapete nulla?
Ciao