El ampersand sirve para crear una referencia a una variable, no es exactamente lo mismo, pero se lo puede comparar con los llamados punteros en otros lenguajes, lo que que hace la referencia no es copiar el contenido de una variable sino hacer referencia al contenido de otra:
En esta linea lo que dice es que en cada interacción del loop, $param va a ser una referencia de la posición, no una copia del valor de la posicion, sino una referencia a ese valor, por lo que cuando cambie el valor de esa posicion del array, tambien cambiara el valor de $param (solo para que se entienda la idea, en realidad $param no tiene valor propio)
En este caso, lo que se esta haciendo es crear una referencia a una referencia, porque $param ya es una referencia en si misma, el resultado es que $bind_params contiene en el primer lugar el string con los tipos y luego una serie de referencias a los elementos de $params.
¿Para que?
Imaginate que tienes que repetir varias veces la misma accion, tienes que insertar 10 clientes, la sentencia se prepara solo una vez y luego solo se modifican los parametros ej:
Código PHP:
Ver originalrequire("DbTable.php");
try {
$usuarios = new DbTable("usuarios");
$usuarios->props["cliente"] = "Manolito";
$usuarios->props["password"] = "1234";
$usuarios->props["edad"] = 22;
echo "Se inserto el registro: ".$insert->insert();
$usuarios->props["cliente"] = "Alberto";
echo "Se inserto el registro: ".$insert->insert();
$usuarios->props["cliente"] = "Jose";
echo "Se inserto el registro: ".$insert->insert();
$usuarios->props["cliente"] = "Pedro";
echo "Se inserto el registro: ".$insert->insert();
$usuarios->props["cliente"] = "Martin";
echo "Se inserto el registro: ".$insert->insert();
} catch(Exception $e) {
echo "Error: " . $e->getMessage();
}
Ese codigo reutiliza la sentencia preparada solo cambiando los valores, eso es posible porque los parametros vinculados a la sentencia son referencias a la propiedad $props, por lo que cuando esta propiedad se modifica, tambien lo hacen los valores de la sentencia (nuevamente, es a modo de ejemplo, la sentencia en realidad no tiene valores)