当前位置: 首页 > 面试题库 >

在PHP中运行MySQL * .sql文件

秦承允
2023-03-14
问题内容

*.sql创建新的网站数据库时,我有两个文件。第一个文件创建所有表。第二个文件填充一些默认记录。我想从PHP执行这些文件。我还将使用Zend_Framework,如果这将有助于完成此任务。

附加信息

  1. 我没有控制台访问权限
  2. 我正在尝试从我们的应用程序中自动生成网站。

使用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()


问题答案:

这个问题不时出现。没有直接从PHP运行.sql脚本的好的解决方案。在某些情况下,.sql脚本中常见的语句不能作为SQL语句执行。例如,MySQL的工具已经内置命令不是由MySQL服务器的认可,例如CONNECTTEESTATUS,和DELIMITER

所以我给+1 @Ignacio Vazquez-
Abrams的答案。您应该通过调用mysql工具在PHP中运行.sql脚本,例如使用shell_exec()

我得到了这个测试的工作:

$command = "mysql --user={$vals['db_user']} --password='{$vals['db_pass']}' "
 . "-h {$vals['db_host']} -D {$vals['db_name']} < {$script_path}";

$output = shell_exec($command . '/shellexec.sql');

另请参阅我对以下相关问题的回答:

  • 从PHP内加载.sql文件
  • 是否可以从另一个sql脚本中的存储过程中调用sql脚本?
  • PHP:在一个mysql_query语句中进行多个SQL查询


 类似资料:
  • 我对Linux很陌生,仍在努力适应自己。我的工作环境设置得很好,安装了XAMPP、node、sublime等。但当我尝试运行laravel应用程序时,第一件让我抓狂的事情是我无法运行php。 我很困惑,因为我已经安装了XAMPP(我以为会为我完成这一切),但后来我只是在我的 /usr/bin中创建了一个符号链接到 /opt/lampp/bin/php,一切都很好(我不确定这是否都是正确的,但它工作

  • 问题内容: 我有一个巨大的(〜500mb)SQL文件,需要在我的数据库上运行。这是来自生产数据库的数据转储,我需要将其放入开发数据库中。通常,如果它较小,则将其粘贴到“ SQL”选项卡中并运行它,但这肯定会炸毁我的浏览器。 如果我将该SQL文件导入开发数据库,​​就像运行SQL文件一样?还是将导入功能专门设置为 导入整个 数据库? 问题答案: 您应该尝试从控制台导入它,因此您不必依赖文件上传限制:

  • 问题内容: 我正在使用angular在wordpress网站中创建页面过渡。我的网站加载了一个普通的wordpress页面,该页面触发了PHP,并在页面中填充了有角元素(正文)。然后,角度元素使用动画过渡以3个单独的html页面更改正文内容(因此页眉和页脚不受影响。) 我在单独的html页面中有PHP。我以为PHP会在每个页面进入视图之前触发-但是我猜是因为页面是由angular而不是浏览器加载的

  • 问题内容: (重要)编辑3: 单独运行testajax2.php而 不是 Ajax。持续时间大致相同,为1.02-1.03秒。所以我想这意味着问题出在PHP- MySQL或XAMPP中? 当我通过phpMyAdmin查询运行它时,结果如下:显示第0-29行(总计约50行。查询耗时 0.0015秒 )。看来问题根本不在于Ajax,而可能在于PHP。我怎样才能解决这个问题?(我也刚刚编辑了问题标题。)

  • Navicat 让你使用 转储 SQL 文件 和 运行 SQL 文件 功能还原你的数据库或模式或表。 要备份数据库或模式或表,在上右击并从弹出菜单选择 转储 SQL 文件 -> 结构和数据 或 僅结构。要还原数据库或模式或表或运行 SQL 文件,右击并从弹出菜单选择 运行 SQL 文件。 提示:你可以拖曳一个 .sql 文件到表的对象列表窗格或到连接窗格的表或模式。Navicat 将弹现 运行 S

  • 问题内容: 我正在尝试通过PHP代码导入.sql文件。但是,我的代码显示此错误: 这是我的代码: 我究竟做错了什么?SQL文件位于同一目录中。 问题答案: 警告: 自PHP 5.5.0起,扩展名已弃用,自PHP 7.0.0起,扩展名已删除。相反,应使用mysqli或PDO_MySQL扩展名。另请参见MySQL API概述, 以获取选择MySQL API时的更多帮助。 只要有可能,应将文件导入MyS