PHP 将 SQL 拆分为单独的查询


Php split SQL in separate queries

我想将SQL拆分为单独的查询...但仍然不起作用

$string = 'CREATE TABLE `articles` (
`id` int(9) auto_increment,
`context` text,
PRIMARY KEY (`id`)
) DEFAULT CHARSET='utf8' COLLATE='utf8_general_ci';
INSERT INTO `articles` VALUES (1, "insert; row1;"),
(2, "update; row2;")';

preg_match_all("/([^;'"]*?('".*?'")?)*?;'s*/U", $string, $result);
print_r($result[0]);

使用爆炸:

$queries = explode(";'n", $string);

或者,您可以预先过滤字符串:

$strings = array();
function capture($match) {
    global $strings;
    $strings[] = $match[0];
    return '<<<' . count($strings) . '>>>';
}
function recopy($string) {
    global $strings;
    foreach($strings as $key => $value) {
        $string = str_replace('<<<' . $key . '>>>', $value, $string);
    }
    return $string;
}
$string = preg_replace_callback('#([''"]).*(?<!'''')(?:'''''''')*''1#isU', 'capture', $string);
$queries = array_map('recopy', explode(";", $string));

并像拉斯穆斯所说,用'''逃脱。

我认为您可以使用explode(";",$string)或找到 ; 位置然后substr()

另一个问题是您对 php 和查询使用相同的 ',而不是将查询包装在 ' 尝试使用 " 代替。

例:CHARSET='utf8' <-- 使用相同的符号来告诉 sql 它是文本,但您已准备好使用该符号来构建查询