Você tem mais casos de problemas do que apenas ponto e vírgula dentro de strings.
- Script incorporado
comandos que não podem ser executados por
mysql_query()
, comoUSE
. - Instruções que não terminam com ponto e vírgula, como
DELIMITER
. - Instruções que contêm ponto e vírgula, mas não entre aspas, como
CREATE PROCEDURE
.
Não conheço uma maneira fácil de lidar com essa tarefa, sem desembolsar o cliente de linha de comando mysql. Percebo que você disse que não pode confiar na presença desse cliente, mas sem esse cliente, você precisa de uma grande quantidade de código PHP para analisar o script e executar as instruções adequadamente.
Você pode encontrar esse código dentro do phpMyAdmin produtos. No entanto, esse produto é licenciado sob a GPL, portanto, se você usar qualquer código, também deverá licenciar seu próprio projeto sob a GPL.
Veja também minhas respostas para essas perguntas relacionadas:
- Executando arquivos *.sql do MySQL em PHP
- Carregar arquivos .sql de dentro PHP
- é possível chamar um script sql de um procedimento armazenado em outro script sql?