我有两个 *.sql
创建新网站数据库时使用的文件。第一个文件创建所有表。第二个文件填充一些默认记录。我想从php执行这些文件。我还使用zendèu框架,如果这有助于实现这一点的话。
附加信息
我没有控制台访问权限
我正在尝试从我们的应用程序中自动生成站点。
解决方案
使用 shell_exec()
...
$command = 'mysql'
. ' --host=' . $vals['db_host']
. ' --user=' . $vals['db_user']
. ' --password=' . $vals['db_pass']
. ' --database=' . $vals['db_name']
. ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');
…我从来没有得到有用的输出,但在另一个线程上遵循了一些建议,最终使它全部工作。我切换到 --option=value
命令的格式和使用的 --execute="SOURCE ..."
而不是 <
执行文件。
而且,我从来没有得到一个很好的解释之间的区别 shell_exec()
以及 exec()
.
13条答案
按热度按时间unguejic1#
要在应用程序中执行表生成,您可能需要创建一个php文件,当您运行它时,它将执行此操作。
5anewei62#
我从未使用过它,但mysqli类有一个multi\u查询方法:
http://php.net/manual/en/mysqli.multi-query.php
4nkexdtk3#
我创建了一个迁移脚本
multi_query
. 它可以在不使用mysql命令行工具的情况下处理mysqldump输出和phpmyadmin导出。我还做了一些逻辑来处理基于存储在db-like-rails中的时间戳的多个迁移文件。我知道它需要更多的错误处理,但目前为我做的工作。过来看:https://github.com/kepes/php-migration
我认为如果你不处理用户输入,只处理由开发人员或导出工具生成的脚本,你就可以安全地使用它。
nbnkbykc4#
一个建议:
wpx232ag5#
n1bvdmb66#
我知道我参加派对已经很晚了,但php mini admin在很多场合都是救星。它基本上是一个“lite”phpmyadmin,全部包含在一个文件中,因此不需要复杂的安装,只需上传并登录即可。傻瓜!
vktxenjb7#
只是想补充一下上面给出的@bill karwin答案。
可以导入|重新初始化|执行自定义sql;数据库使用sql脚本文件,只需点击按钮。该按钮将使用ajax执行sql脚本文件。
如。
前端代码
调用ajax的jquery代码
连接文件
执行命令的控制器代码
oiopk7p58#
别忘了phpmyadmin。与mysql交互的非常可靠的接口。
我不知道它是否解决了您的问题,因为我不知道您是否可以直接从代码与它交互,但我只是想把它扔出去。
nbnkbykc9#
您需要为此创建一个完整的sql解析器。我建议你使用
mysql
命令行工具,从php外部调用它。xam8gpfp10#
可以使用此脚本运行mysql脚本文件。当然,您需要设置$hostname、$username、$password、$databasename、$port和$filename。
f1tvaqid11#
这个问题时有发生。直接从php运行.sql脚本没有好的解决方案。有些边缘情况下,.sql脚本中常见的语句不能作为sql语句执行。例如,mysql工具具有mysql服务器无法识别的内置命令,例如。
CONNECT
,TEE
,STATUS
,和DELIMITER
.所以我给@ignacio vazquez abrams的答案加1。您应该通过调用
mysql
工具,例如shell_exec()
.我做了个测试:
另请参见我对这些相关问题的回答:
从php中加载.sql文件
是否可以从另一个sql脚本中的存储过程调用sql脚本?
php:一条mysql\u查询语句中的多个sql查询
ig9co6j112#
我用的是:
d7v8vwbk13#
下面是我的解决方案,下面的代码解释了is的作用。其原理是逐行读取文件,构建查询并执行每个查询。我看到许多解决方案使用“file\u get\u contents”,这不是一个好的解决方案,因为当它将整个文件内容读取到字符串变量时,可能会导致缓冲区问题。我的解决方案还考虑了触发器的查询。没有数组分配,注解和空行被剥离。
}