你是对的,这个问题是分号爆炸的结果。我们可以使用dbdelta_queries
过滤以修复它。
在这个解决方案中,我们假设所有查询都以CREATE、INSERT或UPDATE开头。如果您在dbDelta中运行查询,而实际情况并非如此,那么preg_match
线路需要调整,否则不能正常工作。
add_filter( \'dbdelta_queries\', \'my_dbDelta_queries\' );
function my_dbDelta_queries( $queries ) {
$toJoin = array();
$start = array();
$count = 0;
foreach( $queries as $i => $query ) :
if ( !preg_match( "/CREATE|INSERT|UPDATE( [^ ]*)/", $query ) ) :
if( !empty( $start ) ) :
$toJoin[$count] = array( $start[key( $start )] );
unset( $queries[key( $start )] );
endif;
$toJoin[$count][] = $query;
unset( $queries[$i] );
$start = array();
else :
$start = array( $i => $query );
$count++;
endif;
endforeach;
if( !empty( $toJoin ) ) :
foreach( $toJoin as $join ) :
$queries[] = implode( \';\', $join );
endforeach;
endif;
return $queries;
}