I am not familiar with using the GSM shield to connect to anything (except to send out a SMS text message)..
However, I have done everything else you touched on before.
IMHO.. (and this just a big problem for all projects that user this approach)..
How does the Arduino -know- when to poll the server/database to see if there is a message in 'queue' that needs to be sent?
Its sort of a waste of resources to just have the Arduino constantly polling some hosted PHP script that in-turn tells the Arduino there is or is not a message waiting to be sent..
How often does the Arduino 'check'?
Seconds? Minutes?
And when there is NOT a message waiting?
Thats a lot of overhead... and http calls..etc.. Having some sort of MQTT server with an Arduino 'subscribed' to a particular 'topic' might be the best approach here..
There is even a super simple MQTT PHP class.. that can be used to write to the database.. and trigger a 'publish' announcement to all subscribed devices.