【问题标题】:PDO run script from .sql file [duplicate]PDO从.sql文件运行脚本[重复]
【发布时间】:2019-03-19 19:19:18
【问题描述】:

如何正确运行 sql 文件以在 MySQL 中插入? 尝试使用 PDO:

$mysql_host = "localhost";
$mysql_database = "planets_test";
$mysql_user = "root";
$mysql_password = "";
# MySQL with PDO_MYSQL
$dbh= new PDO("mysql:host=$mysql_host;dbname=$mysql_database", $mysql_user, $mysql_password);
$query = file_get_contents("planets_db.sql");
$stmt = $dbh->prepare($query);
$stmt->execute();

planets_db.sql" 是 PHPmyAdmin 生成的脚本在哪里?

脚本未返回错误,但未创建表。

【问题讨论】:

    标签: php mysql pdo php-7.2


    【解决方案1】:

    由于这是一个脚本,您可以使用以下代码执行 SQL:

    try {
         $mysql_host = "localhost";
         $mysql_database = "planets_test";
         $mysql_user = "root";
         $mysql_password = "";
         $dbh= new PDO("mysql:host=$mysql_host;dbname=$mysql_database", $mysql_user, $mysql_password);
         $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
         $query = file_get_contents("planets_db.sql");
         $dbh->exec($query);
         print("Created $table Table.\n");
    
    } catch(PDOException $e) {
        echo $e->getMessage();//Remove or change message in production code
    }
    

    如果有错误,它应该告诉你出了什么问题。

    【讨论】:

    • "SQLSTATE[HY000]:一般错误:尝试执行空查询。" .文件名正确。脚本也正确。
    • 尝试打印文件内容以确保其中有内容: echo file_get_contents("planets_db.sql") 。 PHP_EOL;
    • 你的$sql 应该是$query
    • @Jakumi 不错的收获
    • 是的,我看到的唯一问题是,sql 文件可能有不止一个 sql 语句(我想问题描述中的“插入”暗示了这一点),因此 $dbh->exec() 将可能无法按预期工作,因为它仅适用于单个语句,iirc
    【解决方案2】:

    我在我的电脑上检查了你的代码。没有发现任何错误。请检查您在同一目录下的 SQL 文件还是正确的 SQL 文件。

    【讨论】:

    • 这个文件是从 phpMyAdmin 生成的。如果我将文本作为 qwery 传递,则表已创建。
    • 您可以在终端中使用以下命令生成正确的 SQL 文件。 mysqldump -uroot -p database_name > planets_db.sql
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2013-01-04
    • 2013-08-06
    • 2014-01-09
    • 2014-07-29
    • 2019-01-05
    相关资源
    最近更新 更多