簡體   English   中英

Illuminate\\Database\\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table (truncated

[英]Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table &#03 (truncated

我使用 Laravel v5.8 創建了一個 API。 此 API 有一個端點,用於接收一些參數並在數據庫表上創建 1 行。 當我使用 Postman 調用此端點時,它可以工作。

但是...我已經使用 Laravel 5.8 創建了一個應用程序,當這個應用程序嘗試調用該 API 端點發送相同的參數和標頭時,會顯示此錯誤:

“Illuminate\\Database\\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table &#03 (truncated..."

該表應該是“api_log”,但我在錯誤消息中看不到此名稱。

注意:此錯誤僅發生在本地環境中。

Laravel 應用程序使用 GuzzleHttp 調用 API。

APP請求:

$client = new \GuzzleHttp\Client();
$res = $client->request('POST', 'http://project.local/v1/api_log', [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'Authorization' => $_ENV['API_TOKEN']
],
'form_params' => [
'json' => $json_request
]
]);

API 控制器中的 MySQL 語句(未使用模型):

$sql = "INSERT INTO api_log (user_id, environment, start_datetime, end_datetime, requested_api, processing_time, activity_id, ip_address, request_data, response_data, credits) VALUES (".$user_id.",'".$env."','".$start_datetime."','".$end_datetime."',".$requested_api.",".$processing_time.",'".$activity_id."','".$ip_address."','".$request_data."','".$response_data."',".$credits.")";            

$insert_log = DB::connection('mysql_log')->statement($sql);

我已經嘗試過使用這樣的模型,但沒有用:

class ApiLog extends Model
{
    protected $connection = 'mysql_log';
    protected $table = 'api_log';
}

我正在為 API 和 APP 使用普通的 http://localhost/... 域。 我嘗試將 API 包裝到像http://project.local這樣的虛擬主機中,但顯示了相同的錯誤。

有什么線索嗎? 謝謝。

嗯......經過很多小時后,我通過查看 Laravel 日志文件解決了這個問題。

問題出在 .env 文件中。

.env 文件有以下幾行:

ALTER_CONNECTION=mysql_log
ALTER_HOST=127.0.0.1
ALTER_PORT=3306
ALTER_DATABASE=my_db
ALTER_USERNAME=root
ALTER_PASSWORD=my_pass

我已經改變了它:

ALT_CONNECTION=mysql_log
ALT_HOST=127.0.0.1
ALT_PORT=3306
ALT_DATABASE=my_db
ALT_USERNAME=root
ALT_PASSWORD=my_pass

我認為這些變量名稱被捕獲(我不知道為什么)所以數據庫配置失敗了。

謝謝你們。

很遺憾我無法發表評論。 但似乎您尚未在數據庫配置文件中指定連接mysql_log 為了使用$connectionDB::connection()你必須在config/database.php指定連接

如果您這樣做了,請檢查您的值是否正確放入文件中。 為數據庫/用戶名/密碼使用與您通過應用程序運行的其他連接不同的constant是明智的。

'connections' => [
    // New connection
    'mysql_log' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('MYSQL_LOG_HOST', '127.0.0.1'),
        'port' => env('MYSQL_LOG_PORT', '3306'),        
        'database' => env('MYSQL_LOG_DATABASE', 'DB2'),
        'username' => env('MYSQL_LOG_USERNAME', 'DB2'),
        'password' => env('MYSQL_LOG_PASSWORD', 'PASS'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],


    // Typical primary connection
    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],
]

將連接添加到配置后,您可以運行php artisan config:cache以確保正確緩存新配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM