insercion - php query multiple lines
¿Cómo crear una vista con mysqli_multi_query? (0)
Estoy desarrollando una aplicación PHP, que debería ser capaz de configurar una base de datos de proyectos y actualizarla / su definición de datos, usando una lista de archivos SQL. Aquí hay un primer prototipo de procedimiento escrito rápido y sucio ingenuo:
<?php
function executeSQLFiles(array $dbOptions, array $dbFiles) {
$dbConnection = mysqli_connect($dbOptions[''host''], $dbOptions[''user''], $dbOptions[''password''], $dbOptions[''database'']);
if (mysqli_connect_errno($dbConnection)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// db setup
foreach ($dbFiles[''setup''] as $listItem) {
$query = file_get_contents(__DIR__ . ''/../../config/database/'' . $listItem[''file'']);
$result = mysqli_multi_query($dbConnection, $query);
if (!$result) {
die($listItem[''file''] . '': '' . ''Invalid query: '' . mysqli_error($dbConnection) . PHP_EOL);
} else {
echo $listItem[''file''] . '' '' . ''OK'' . PHP_EOL;
}
}
// db migration
}
Funciona para tablas, pero no funciona para vistas. No obtengo ningún error, la vista simplemente no se crea y obtengo el mensaje "filename.sql OK".
La vista que crea la secuencia de comandos SQL (generada con MySQL Workbench) está bien. Cuando lo ejecuto en un cliente MySQL, se crea una vista.
-- -----------------------------------------------------
-- Placeholder table for view `allproviders`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `allproviders` (`id` INT, `providertype` INT, `providerid` INT, `displayedname` INT, `url` INT, `city_id` INT);
SHOW WARNINGS;
-- -----------------------------------------------------
-- View `allproviders`
-- -----------------------------------------------------
DROP VIEW IF EXISTS `allproviders` ;
SHOW WARNINGS;
DROP TABLE IF EXISTS `allproviders`;
SHOW WARNINGS;
DELIMITER $$
CREATE OR REPLACE VIEW `allproviders` AS
SELECT
`providers`.`id`,
`providers`.`type` AS `providertype`,
`providers`.`providerid` AS `providerid`,
`universities`.`displayedname`,
`universities`.`url`,
`universities`.`city_id`
FROM
`providers`
JOIN
`universities` ON `providers`.`providerid` = `universities`.`id`
UNION
SELECT
`providers`.`id`,
`providers`.`type` AS `providertype`,
`providers`.`providerid` AS `providerid`,
`partners`.`displayedname`,
NULL `url`,
`partners`.`city_id`
FROM
`providers`
JOIN
`partners` ON `providers`.`providerid` = `partners`.`id`
$$
DELIMITER ;
;
SHOW WARNINGS;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
¿Estoy haciendo algo mal? ¿Cómo funciona?
Gracias