繁体   English   中英

PDOException:SQLSTATE[HY000]:一般错误:7890 找不到文件

[英]PDOException : SQLSTATE[HY000]: General error: 7890 Can't find file

我正在尝试运行以下项目

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;
        ");
    }
}

据我所知,我没有更改任何文件,并且与回购中的文件相同

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

$ipsPath = addslashes($ipsPath);

在您的查询中使用它之前。

如你看到的

PDOException :SQLSTATE[HY000]:一般错误:7890 找不到文件“ C:UsersuserDesktoplaravel-vue-polling-appstorageips.csv ”。 没有目录分隔符?

您是否尝试使用[ESCAPED BY 'char']

你的种子文件 $ips 应该是这样的

$ipsPath = addslashes(storage_path('ips.csv'));
...
....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM