我使用以下代码在我的应用程序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(),
);
}
答案 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(),
);
}