首页 > 解决方案 > PDOException:SQLSTATE [HY000]:一般错误:7890 找不到文件

问题描述

我正在尝试运行以下项目

https://github.com/saeedvaziry/laravel-vue-polling-app.git'

我正在关注项目 readme.md 但我在运行时收到 PDOException

php artisan migrate:refresh --seed

我的问题是什么导致了这个错误,我该如何解决

这是cli输出

 PDOException  : SQLSTATE[HY000]: General error: 7890 Can't find file 'C:UsersuserDesktoplaravel-vue-polling-appstorageips.csv'.

  at C:\Users\user\Desktop\laravel-vue-polling-app\database\seeds\IpAddressesTableSeeder.php:18
    14|         $ipsPath = storage_path('ips.csv');
    15|         $pdo = \DB::connection()->getPdo();
    16|         $pdo->exec("
    17|                         LOAD DATA LOCAL
  > 18|                                 INFILE '" . $ipsPath . "'
    19|                         INTO TABLE
    20|                                 `ip_addresses`
    21|                         FIELDS TERMINATED BY ','
    22|                         ENCLOSED BY '\"'

  Exception trace:

  1   PDO::exec("
                        LOAD DATA LOCAL
                                INFILE 'C:\Users\user\Desktop\laravel-vue-polling-app\storage\ips.csv'
                        INTO TABLE
                                `ip_addresses`
                        FIELDS TERMINATED BY ','
                        ENCLOSED BY '"'
                        LINES TERMINATED BY '
'
                        IGNORE 0 LINES;
        ")
      C:\Users\user\Desktop\laravel-vue-polling-app\database\seeds\IpAddressesTableSeeder.php:18

  2   IpAddressesTableSeeder::run()
      C:\Users\user\Desktop\laravel-vue-polling-app\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29

这是播种机文件

<?php

use Illuminate\Database\Seeder;

class IpAddressesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $ipsPath = storage_path('ips.csv');
        $pdo = \DB::connection()->getPdo();
        $pdo->exec("
            LOAD DATA LOCAL
                INFILE '" . $ipsPath . "'
            INTO TABLE
                `ip_addresses`
            FIELDS TERMINATED BY ','
            ENCLOSED BY '\"'
            LINES TERMINATED BY '\r\n'
            IGNORE 0 LINES;
        ");
    }
}

据我所知,我没有更改任何文件,并且在 repo 中是一样的

标签: phpmysqllaravelxampp

解决方案


Windows 使用\路径分隔符,这也是 MySQL 中的转义字符。当您传递C:\Users\user\Desktop\laravel-vue-polling-app\storage\ips.csv给 MySQL 时,它认为 single\是转义字符,而不是路径分隔符。要解决此问题,请执行

$ipsPath = addslashes($ipsPath);

在查询中使用它之前。


推荐阅读