połączeń działa dobrze w terminalu MySQL, ale w PHP, spowodowane Commands out of sync; you can't run this command nowCommands out of sync; you can't run this command now
procedura przechowywana MySQL spowodowane `Polecenia Spośród sync`
Moja procedura jest
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
$$
gdzie getSimilarity jest funkcją.
W 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;
}
Co mam teraz zrobić? Dzięki!
Dzięki za to. Mam googleed to, ale to nie wydaje się być pomocne. – Ovilia
Myślę, że optymalizator mysql interpretuje twoją funkcję getMostSimilar jako rekursywną i chce, żebyś uwolnił, używał lub przechowywał dane, zanim zrobi cokolwiek więcej. – amelvin
Niestety MySQL nie zezwala na zmienne w klauzuli LIMIT, więc po prostu przepisanie procedury, aby wykonać SELECT, nie zadziała – wonk0