Answer: either f(x)=c, h(x)={0,a,x=0,x=0, where a and c are arbitrary constants or f(x)=x+b, h(x)=x, where b is an arbitrary constant.
Let h(0)=a. Set x=0 in the initial equation
f(x2+yh(x))=xh(x)+f(xy)for all x,y∈R.(∗)
We obtain f(ay)=f(0)=c for all y.
If a=0, then ay admits all real values, so the function f(x)=c is identically constant. So the equation has the form c=xh(x)+c or xh(x)=0, therefore h(x)=0 for x=0, and h(0)=a admits any value. As it is easy to verify the obtained pair of the functions (f(x),h(x)) satisfies (∗).
Let a=0, i.e. h(0)=0. Note that if h(x0)=x0 for some x0 (x0=0), then there exists y0 such that x02+y0h(x0)=x0y0 (indeed, it suffices to set y0=x02/(x0−h(x0))). Setting x=x0, y=y0, in the initial equation, we obtain x0h(x0)=0, i.e. h(x0)=0. Now setting x=x0 in the initial equation, we have f(x02)=f(x0y) for all y. Since x0=0, we see that x0y admits any real values, so f(x)=c is identically constant. But this case is already considered above.
It remains to suppose that h(x)=x for all x. Then (∗) can be rewritten in the form
f(x2+yx)=x2+f(xy)for all x,y∈R.(∗∗)
Let f(0)=b. Setting y=0 in (∗∗), we obtain f(x2)=x2+b for all x, i.e. f(x)=x+b for all nonnegative x. If we set y=−x, then we obtain f(−x2)=−x2+b, i.e. f(x)=x+b for all nonpositive x.