Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta complexa do Wordpress usando várias consultas


Isso parece ser uma limitação do próprio PHP, veja este post nos fóruns do Wordpress .

Me deparei com o mesmo problema e acabei criando uma função customizada que faz o trabalho, coloco aqui caso seja útil para alguém. A função é bastante simples, pois faz algumas suposições, mas deve ser fácil modificá-la para adaptar a diferentes necessidades. Especificamente, assume que:
  • Todas as instruções são inserções e atualizações, não há dados para retornar.
  • As instruções são separadas por uma sequência de fim de linha.
  • Os extratos são incluídos em uma transação.

Aqui está a função:
function execute_multiline_sql($sql) {
    global $wpdb;
    $sqlParts = array_filter(explode("\r\n", $sql));
    foreach($sqlParts as $part) {
        $wpdb->query($part);
        if($wpdb->last_error != '') {
            $error = new WP_Error("dberror", __("Database query error"), $wpdb->last_error);
            $wpdb->query("rollback;");
            return $error;
        }
    }
    return true;
}

Exemplo de uso:
$sql = "start transaction;\r\n" .
       "insert into ...;\r\n" .
       "update ...;\r\n" .
       "commit;\r\n"
       ;

$result = execute_multiline_sql($sql);
if(is_wp_error($result)) {
    //Fail!
}