PDOException: SQLSTATE [HY000]: общая ошибка: 7890 Не удается найти файл - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь запустить следующий проект

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

Ни один из файлов не был изменено мной и как в репо насколько я знаю

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Windows использует \ для разделителя пути, который также является escape-символом в MySQL. Когда вы передаете C:\Users\user\Desktop\laravel-vue-polling-app\storage\ips.csv в MySQL, он думает, что одиночный \ является escape-символом, а не разделителем пути. Чтобы это исправить, выполните

$ipsPath = addslashes($ipsPath);

, прежде чем использовать его в своем запросе.

0 голосов
/ 21 января 2020

Как видите

PDOException: SQLSTATE [HY000]: общая ошибка: 7890 Не удается найти файл 'C: UsersuserDesktop laravel - vue -polling-appstorageips. CSV ». нет разделителей каталогов?

Вы пытались использовать [ESCAPED BY 'char']

Ваш файл сеанса $ ips должен быть похож на

$ipsPath = addslashes(storage_path('ips.csv'));
...
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...