Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用前验证SQL文件_Php_Mysql - Fatal编程技术网

Php 使用前验证SQL文件

Php 使用前验证SQL文件,php,mysql,Php,Mysql,我使用php代码将.sql文件导入mysql数据库。代码要做的第一件事是检查文件,如果文件存在,则删除几个表并导入sql文件(替换删除的表)。可以想象,有一次sql文件无效,但代码继续前进并删除了表。有没有一种方法可以使用php验证sql文件的有效性 出于几个原因,这需要一定程度的自动化。我不总是做进口。导入后,代码立即使用新表更新/创建/删除其他表中的记录。所以我不能有一个工作流,我停止这个过程来检查它是否成功;我需要一种php验证成功的方法 这是用于导入sql文件的代码: $templine

我使用php代码将.sql文件导入mysql数据库。代码要做的第一件事是检查文件,如果文件存在,则删除几个表并导入sql文件(替换删除的表)。可以想象,有一次sql文件无效,但代码继续前进并删除了表。有没有一种方法可以使用php验证sql文件的有效性

出于几个原因,这需要一定程度的自动化。我不总是做进口。导入后,代码立即使用新表更新/创建/删除其他表中的记录。所以我不能有一个工作流,我停止这个过程来检查它是否成功;我需要一种php验证成功的方法

这是用于导入sql文件的代码:

$templine = '';  
$lines = file($filename);  
foreach ($lines as $line) {  
    if (substr($line, 0, 2) == '--' || $line == '') continue;  
    $templine .= $line;  
    if (substr(trim($line), -1, 1) == ';') {  
        $wpdb->query($templine);  
        $templine = '';  
    }  
}  

有趣。我可以想出两种方法

一种方法是使用另一个数据库作为测试,连接到该数据库,首先将sql导入该数据库,验证它是否与查询一起工作。若通过,那个么连接到主数据库并照常进行

另一种方法是将现有数据库导出到sql文件中。导入sql文件后,请验证它是否与查询一起工作,如果不工作,请使用导出的sql文件导入旧数据库


所有这些都可以在一个步骤中自动运行。

而不是先删除表,您不能尝试使用其他名称创建新表吗?如果成功,请删除并重命名,否则文件将损坏。谢谢您的建议。我已经更新了我的问题,包括为什么这对我目前的情况不起作用。@ModusPonen你可以不停地手动检查就完成他的建议和我的建议。让代码对您希望存在的一行或多行执行查询,并根据结果让代码相应地响应是的,我喜欢重命名方法。我可以重命名表,导入,检查它们是否存在,然后从那里开始。我想可能有一些神奇的函数可以验证sql文件或其他东西的有效性,但这很好。谢谢。这是用于导入sql文件的代码。该代码非常幼稚,这可能有助于您的稳定性。它无法正确处理大量完全有效的SQL。至少应修改它,以允许在
--
之前或
之后的行上出现游离的空白字符尝试将每行上下文化时。要正确执行此操作,消除此代码对有效SQL的潜在错误以及它无法把握的细微差别,您确实需要SQL标记器库的服务。这与此建议和j08691的建议一起工作,重命名表,执行导入,然后检查新表是否存在,如果良好,删除重命名的表,如果不好,删除导入过程中创建的任何新表,然后将旧表重命名回原来的状态。谢谢