我怎么知道SQL文件的内容是否正确执行了?

时间:2016-07-03 18:33:45

标签: sql symfony doctrine

我使用以下代码在我的应用程序Symfony 2.7上执行SQL文件,它可以工作,但我想知道如何验证查询是否成功。感谢您的帮助。

SQL文件是什么,完全加载数据库,包含记录

public function importarAction(Request $request)
{

    /**
     * Creo un formulario para Seleccionar el archivo SQL
     */
    $defaultData = array('message' => 'Type your message here');
    $form = $this->createFormBuilder($defaultData)
        ->add('archivo', 'file', array('label' => 'Seleccione el Archivo SQL: '))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        /**
         * Obtengo la ruta del Archivo y lo Muevo hasta
         * mi propio directorio dentro de la Aplicacion symfony
         */
        $file= $form->get('archivo')->getData();
        $nombre='SQLimportado'.date("dmYHis", time()).'.sql';
        $cvDir = $this->container->getparameter('kernel.root_dir').'\Resources\importados\\';
        $file->move($cvDir,$nombre);

        /**
         * Busco el archivo utilizando los datos anteriores
         * como la ruta y el nombre del archivo
         */
        $finder = new Finder();
        $finder->files()->in($cvDir);
        $finder->name($nombre);


        foreach ($finder as $file) {
            /**
             * Ejecuo el SQL
             */
            try{
                $contenido = $file->getContents();
                $em = $this->getDoctrine()->getEntityManager();
                $db = $em->getConnection()->executeQuery($contenido);
                return 'ok';
            }catch (Exception $e){
                return 'fail';

            }
        }
    }

    return array(
        'form'   => $form->createView(),
    );

}

1 个答案:

答案 0 :(得分:0)

最后我取得了成果:

我所做的是使用mysqli运行SQL文件,而不是Dcotrine的管理器。

/**
 * @Route("/importar", name="importar")
 * @Template("SeguridadBundle:Default:index.html.twig")
 */
public function importarAction(Request $request)
{

    /**
     * Creo un formulario para Seleccionar el archivo SQL
     */
    $defaultData = array('message' => 'Type your message here');
    $form = $this->createFormBuilder($defaultData)
        ->add('archivo', 'file', array('label' => 'Seleccione el Archivo SQL: '))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        /**
         * Obtengo la ruta del Archivo y lo Muevo hasta
         * mi propio directorio dentro de la Aplicacion symfony
         */
        $file= $form->get('archivo')->getData();
        $nombre='SQLimportado'.date("dmYHis", time()).'.sql';
        $cvDir = $this->container->getparameter('kernel.root_dir').'\Resources\importados\\';
        $file->move($cvDir,$nombre);

        /**
         * Busco el archivo utilizando los datos anteriores
         * como la ruta y el nombre del archivo
         */
        $finder = new Finder();
        $finder->files()->in($cvDir);
        $finder->name($nombre);


        foreach ($finder as $file) {
            /**
             * Seobtiene el contenido del SQL
             * y se Crea la conexion a MySQL
             */
            $contenido = $file->getContents();
            $em = $this->getDoctrine()->getEntityManager();
            $parametros = $em->getConnection()->getParams();

            /**
             * Creo un nuevo parametro de Mysqli
             */
            $mysqli = new \mysqli(
                $parametros['host'],
                $parametros['user'],
                $parametros['password'],
                $parametros['dbname']);

            /**
             * Ejecutor el archivo SQL
             * mediante la opcion de, multiple query
             * y valido si existen errores durante su ejecucion
             */
            if ($mysqli->multi_query($contenido)) {
                do {

                    if (!$mysqli->more_results()) {
                        break;
                    }
                    if (!$mysqli->next_result()) {
                        /**
                         * si hay error de algun tipo Se Mostrara el mensaje de ERROR
                         */
                        return $this->render('SeguridadBundle:Default:respuesta.html.twig', array(
                            'resultado' => 'Seha producido un error durante la ejecución del SQL!',
                        ));
                        break;
                    }
                } while (true);
                /**
                 * si todo esta bien Se muestra el MSG de CORRECTO
                 */
                return $this->render('SeguridadBundle:Default:respuesta.html.twig', array(
                    'resultado' => 'La importación de ha ejecutado correctamente!',
                ));
            }
            else {
                /**
                 * si hay error de algun tipo Se Mostrara el mensaje de ERROR
                 */
                return $this->render('SeguridadBundle:Default:respuesta.html.twig', array(
                    'resultado' => 'Seha producido un error durante la ejecución del SQL!',
                    'error'=>$mysqli->errno
                ));

            }
        }
    }

    return array(
        'form'   => $form->createView(),
    );

}