de llamadas funciona bien en la terminal de MySQL, pero en PHP, causó Commands out of sync; you can't run this command nowCommands out of sync; you can't run this command now
procedimiento almacenado de MySQL causó `Comandos fuera de sync`
Mi procedimiento es
delimiter $$
create procedure getMostSimilar (IN vU_ID INT, IN voffset INT, IN vsize INT)
BEGIN
set @offset = voffset;
set @size = vsize;
set @uid = vU_ID;
prepare SimilarStmt from
"SELECT U_ID, getSimilarity(U_ID, ?) AS similar FROM Answer WHERE U_ID != ? GROUP BY U_ID ORDER BY similar DESC LIMIT ?, ?";
execute SimilarStmt using @uid, @uid, @offset, @size;
deallocate prepare SimilarStmt;
END
$$
donde getSimilarity es una función.
En PHP:
function getMostSimilar($U_ID, $offset, $size){
$query = sprintf("CALL getMostSimilar(%s, %s, %s)",
$U_ID, $offset, $size);
$result = mysql_query($query);
print mysql_error();
if (!$result){
return $query;
}
$ans = array();
$len = 0;
while($row = mysql_fetch_assoc($result)){
$ans[$len] = $row;
$len++;
}
return $ans;
}
¿Qué debo hacer ahora? ¡Gracias!
Gracias por eso. Lo busqué en Google, pero no parece ser útil. – Ovilia
Creo que el optimizador de mysql está interpretando su función getMostSimilar como recursiva y quiere que libere, use o almacene las devoluciones de datos antes de que haga algo más. – amelvin
Desafortunadamente, MySQL no permitirá las variables en la cláusula LIMIT, por lo que simplemente reescribir el procedimiento para hacer un SELECCIONAR no funcionará – wonk0