首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PHP运行SQL脚本

问通过PHP运行SQL脚本
EN

Stack Overflow用户
提问于 2014-10-22 11:51:21
回答 3查看 20.1K关注 0票数 4

我创建了一个backup.sql脚本来恢复MySql数据库。我使用PHPMyAdmin导入检查了脚本,一切正常(数据库已成功恢复)。现在我想通过PHP运行它。我找到了这个问题,我找到了:

1)在htdocs文件夹中创建具有以下内容的PHP文件

代码语言:javascript
复制
$site_path= realpath(dirname(__FILE__)).'/';

$command = 'mysql'
    . ' --host=' . 'localhost'
    . ' --user=' . 'myuser'
    . ' --password=' . 'mypass'
    . ' --database=' . 'dbname'
    . ' --execute="SOURCE ' . $site_path;

$output = shell_exec($command . 'backup.sql"');
echo "<pre>".$output."</pre>";

2)将backup.sql脚本放入htdocs文件夹中。

但是,当我运行脚本时,数据库上不会发生任何事情,也不会显示关于shell_exec结果的任何内容。我在一台windows机器上运行Apache下的PHP和MySql。命令变量具有以下值:

代码语言:javascript
复制
mysql --host=localhost --user=myuser --password=mypass--database=dbname --execute="SOURCE C:\Programmi\Apache Software Foundation\Apache2.2\htdocs/

我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2014-10-22 12:01:14

代码语言:javascript
复制
$mysql_host = "localhost";
$mysql_database = "db";
$mysql_user = "user";
$mysql_password = "password";
# MySQL with PDO_MYSQL  
$db = new PDO("mysql:host=$mysql_host;dbname=$mysql_database", $mysql_user, $mysql_password);

$query = file_get_contents("shop.sql");

$stmt = $db->prepare($query);

if ($stmt->execute())
     echo "Success";
else 
     echo "Fail";

如果您的sql文件中的全部代码都是100%正确的,并且对其没有任何更改,那么请尝试使用PDO来提高代码中的安全性。

票数 7
EN

Stack Overflow用户

发布于 2015-08-27 21:24:37

您可以通过使用MYSQL工具作为工作台来克服这一问题,在那里您可以连接到远程/本地服务器并运行.sql文件而不需要使用PHP。

PHP用于应用反映特定业务功能的业务查询,而不是用于服务器操作或其他工具作业(如DBMS工具)。

如果您确实需要这样做,您可以检查这个读取教程文件的;,并使用;字符将查询分解为一个数组,该字符将对每个查询进行分隔。

然后,它使用foreach循环遍历数组中的每个查询,并自行执行查询。

票数 0
EN

Stack Overflow用户

发布于 2022-01-03 03:38:51

我注意到的一件事是,操作可能会花费更长的时间,或者如果之后需要另一个操作,特别是在开发过程中测试文件是否已经执行时,执行方法将不会终止。

我的简单解决方案是执行查询,然后得到准备好的查询和运行方法rowCount,这样我们就可以安全地测试是否终止了.。

所以,只要使用$count = $stmt->rowCount();,而不仅仅是$stmt->execute();

代码语言:javascript
复制
try {
    $db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
    $query = file_get_contents(__DIR__ . "/test.sql");
    $stmt = $db->prepare($query);
    $stmt->execute();
    $stmt->closeCursor();// Safely consuming the SQL operation till end
    $count = $stmt->rowCount(); // Check if not pending transaction
    if ($count) {
        foreach($db->query('SELECT * from person') as $row) {
            print_r($row);
        }
    }

} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    exit;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26506820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档