When we bind prepared statements, we need tests and functionality to guarantee a thread safe initialisation. This is because re-preparing statements can cause a performance penalty and can interfere with the low level protocol.
To prevent this, we need a just time initialisation with the appropriate locking and testing, even if the mechanism is as simple as using lazy before every bind definition.