The simplest solution doesn't work; removing the semi-colon from the end, the result is the same.
A friend of mine had the same problem and he has solved the problem creating, into the file conf/ApplicationDelegate.php, a method like this below that seems to work.
function call_stored_procedure(& $CALL){
$ret['code']=1; //default return value is not error
$ret['error']=$CALL.' :';//default return value is the call line
$error=0;
$app =& Dataface_Application::getInstance();
$conf = $app->conf();
$mysqli = new mysqli($conf['_database']['host'], $conf['_database']['user'], $conf['_database']['password'] , $conf['_database']['name']);
/* check connection */
if (mysqli_connect_errno()) {
$message="Connect failed: %s\n".mysqli_connect_error();
$ret['code']=$error;
$ret['error'].=$message;
} else {
$mysqli->autocommit(FALSE);
if ($mysqli->multi_query($CALL)) {
do {
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
if (substr( $row[0], 0, strlen('ERROR') ) == 'ERROR') {
if ( ! (substr( $row[0], 0, strlen('ERROR: channel already linked to address') ) == 'ERROR: channel already linked to address') ) {
$ret['code']=$error;
$ret['error'].=$row[0];
}
}
}
$result->free();
}
} while ($mysqli->next_result());
}
if ($mysqli->errno) {
$message=$mysqli->error;
$ret['code']=$error;
$ret['error'].=$message;
$mysqli->rollback();
}
else {
$mysqli->commit();
}
$mysqli->close();
}
return $ret;
}