Usando PHP y llamando a sqlcmd

Me he estado devanando la cabeza con esto al tratar de llamar a sqlcmd en PHP (IIS/Windows), pero no sé por qué no funciona.

Código:

 $sql = 'sqlcmd -S '.$serverName.' -d '.$databasename.' -U '.$userName.' -P '.$userPassword.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql';
    shell_exec($sql);

El código se ejecuta pero no se genera nada en el

C: \ temp

carpeta. Intenté ejecutarlo manualmente desde inicio/ejecutar y funciona sin ningún problema. Incluso lo intenté solo exec($sql), utilizando la ruta absoluta completa a sqlcmd, intenté llamar a cmd.exe y luego a sqlcmd, pero hasta ahora nada.

Agregué IUSR completo y Usuarios completos a la carpeta también para asegurarme de que no sean permisos de IIS, pero aún así nada.

También usé proc mon para ver si eso me decía algo y no veo nada relacionado con sqlcmd, cmd o php.exe (eso me llevaría a una razón: las entradas aparecen pero solo las entradas de llamadas estándar).

Realicé una gran cantidad de búsquedas sobre PHP y llamé a SQLCMD, pero parece que la mayoría de las personas llaman a un archivo por lotes con sqlcmd. ¡Realmente no puedo hacer eso aquí, así que cualquier orientación será apreciada!

preguntado Oct 07 '14, 14:10

¿Ha intentado usar la ruta absoluta/completa para sqlcmd en el capítulo respecto a la shell_exec ¿función? -

$sql = 'C:\Archivos de programa\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE -S '.$serverName.' -d '.$nombre de la base de datos.' -U '.$nombreUsuario.' -P '.$contraseñausuario.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql'; shell_exec($sql); Ejecuté lo anterior y no hubo salida. Incluso intenté usar \\ y todavía nada. ¡Gracias! -

¿Ha intentado ver qué contiene $ sql y si es correcto? ¿Has probado el comando que funciona en la línea de comando como está en shell_exec? -

¿Has comprobado que no estás usando el modo seguro? php.net/modo-seguro -

Acabo de depurar el código para obtener los datos en $sql y pude ejecutarlo mediante un comando. Una cosa a tener en cuenta es que cuando lo ejecuté, apareció el mensaje de UAC. ¿Podría ser eso lo que está restringiendo esto? EDITAR: Verifiqué y safe_mode está desactivado. -

2 Respuestas

Aquí hay una idea posible, use un script por lotes para hacer el trabajo por usted de esta manera:

sqlcmd.bat

@ECHO OFF
cd /D "C:\Program Files\Microsoft SQL Server\100\Tools\Bin\"
sqlcmd -S %1 -d %2 -U %3 -P %4 -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql

Luego llame a este script por lotes usando php como este:

test.php

<?php

$serverName = 'xyz';
$databasename = 'xyz';
$userName = 'xyz';
$userPassword = 'xyz';

shell_exec("sqlcmd.bat $serverName $databasename $userName $userPassword");

echo 'Done';

?>

Respondido 07 Oct 14, 14:10

Revisé y modifiqué mi código y agregué el archivo .bat a la raíz de mi directorio web y el archivo sqlscripts.sql no se creó. ¿Es posible que sean permisos? ¡Gracias por la ayuda hasta ahora! - jmc1919

No encontré una solución en línea, así que pensé que podría portar esto en caso de que alguien lo necesite...

Algo le dice al usuario de php que no puede ejecutar específicamente "SQLCMD.EXE". Simplemente no llegué a averiguar qué es eso, así que le di la vuelta...

busque, copie y cambie el nombre de este... SQLCMD.rll... a este... ss_sql.rll

busque, copie y cambie el nombre de este... SQLCMD.exe... a este... ss_sql.exe

Y ahora funciona... al menos para mí :)

HTH

Respondido 07 ago 19, 05:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.