There's nothing wrong with zero-hours contracts in their own right. There are some circumstances where they are entirely appropriate - if someone wanted to retain me on a zero-hours contract, I could decide whether it was right for me or not. The problems come when they are used in an exploitative and abusive way, where there is an inequality between the contracting parties.
The best way to solve that is NOT by well meaning but restrictive legislation. Its by having a strong and robust economy with 97% or 98%* employment, so employees can negotiate with employers from a position of equal strength, and where employers can afford to pay decent rates because of the growing sales that a healthy economy with close-to-fully* employed consumers will bring.
*100% or full employment is actually a bad idea. Just think of the least employable person you know (and we all know at least one) and ask yourself why any employer should employ that person, and whether you would want to pay for or rely on the goods and services that they produced.