<?php
$sql = "BEGIN;INSERT INTO TABLE_A (a, b, c) VALUES('42', '12', '\'ab\'c; DEF');INSERT INTO TABLE_B (d, e, f) VALUES('42', '43', 'XY\'s Z ;uvw');COMMIT;" ;
$splits = preg_split ( '~\([^)]*\)(*SKIP)(*F)|;~' , $sql ) ; echo "Option 1<br />" ;
echo "<br />Option 2<br />" ;
$splits = preg_split ( '~\([^)]*\)(*SKIP)(*F)|(?<=;)(?![ ]*$)~' , $sql ) ;
PD9waHAKJHNxbCA9ICJCRUdJTjtJTlNFUlQgSU5UTyBUQUJMRV9BIChhLCBiLCBjKSBWQUxVRVMoJzQyJywgJzEyJywgJ1wnYWJcJ2M7IERFRicpO0lOU0VSVCBJTlRPIFRBQkxFX0IgKGQsIGUsIGYpIFZBTFVFUygnNDInLCAnNDMnLCAnWFlcJ3MgWiA7dXZ3Jyk7Q09NTUlUOyI7CiRzcGxpdHMgPSBwcmVnX3NwbGl0KCd+XChbXildKlwpKCpTS0lQKSgqRil8O34nLCAkc3FsKTsKZWNobyAiT3B0aW9uIDE8YnIgLz4iOwpwcmludF9yKCRzcGxpdHMpOwplY2hvICI8YnIgLz5PcHRpb24gMjxiciAvPiI7CiRzcGxpdHMgPSBwcmVnX3NwbGl0KCd+XChbXildKlwpKCpTS0lQKSgqRil8KD88PTspKD8hWyBdKiQpficsICRzcWwpOwpwcmludF9yKCRzcGxpdHMpOwoK
stdout
Option 1<br />Array
(
[0] => BEGIN
[1] => INSERT INTO TABLE_A (a, b, c) VALUES('42', '12', '\'ab\'c; DEF')
[2] => INSERT INTO TABLE_B (d, e, f) VALUES('42', '43', 'XY\'s Z ;uvw')
[3] => COMMIT
[4] =>
)
<br />Option 2<br />Array
(
[0] => BEGIN;
[1] => INSERT INTO TABLE_A (a, b, c) VALUES('42', '12', '\'ab\'c; DEF');
[2] => INSERT INTO TABLE_B (d, e, f) VALUES('42', '43', 'XY\'s Z ;uvw');
[3] => COMMIT;
)