Eloquent innodb - SQLSTATE [42S02]:找不到基表或视图表不存在

时间:2018-01-03 23:36:48

标签: eloquent

我有这种奇怪的崩溃,试图用几个小时来解决但没有成功,在互联网上到处检查并没有找到解决方案。

我正在运行Eloquent(没有laravel)。我有两个服务器(前端和后端)。 DB位于后端服务器中。

我正在运行完全相同的代码,使用来自两台服务器的laravel连接到数据库。从后端服务器一切正常。在前端服务器中,我得到了混合结果。在9个表中:

  1. 三件作品,我能够检索数据。
  2. 三返[items:protected] => Array(),而table有要返回的数据。
  3. 三导致致命错误SQLSTATE [42S02]:未找到基表或视图表不存在
  4. 来自#1我明白这与数据库用户/密码问题无关。

    对于#2,我使用getQueryLog()检查了查询,然后我在phpmyadmin中运行查询,它们都有效。

    从我到目前为止观察到的,导致#3的所有表都是InnoDB。为什么我的其他桌子是MyIsam我不知道。

    完全相同的代码在后端服务器中工作,所以表名不是单数或其他与代码相关的问题也不是问题。

    后端服务器是php 5.5.9,雄辩5.4.45

    前端服务器是php 5.6.32,eloquent 5.4.36

    知道如何处理#2(返回数据为空)和#3(php致命错误)?

1 个答案:

答案 0 :(得分:0)

好的,发现了这个疯狂的bug。 首先,我发现我们在前端服务器上有一个旧版本的数据库。它不应该在那里,所以我甚至没有想到它是一种可能性。

此外,代码中存在问题:

$dbhost = __MYSQLDB_HOST__;
$dbuser = 'xxxxx';
$dbpass = 'xxxxx';
$dbname = 'xxxxx';

$capsule = new Capsule;

$capsule->addConnection(array(
    'driver'    => 'mysql',
    'host'      => 'localhost',  // <= this is the problem!!!
    'database'  => $dbname,
    'username'  => $dbuser,
    'password'  => $dbpass,
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => ''
));

正如您所看到的,当连接到数据库时,它使用localhost而不是包含后端服务器上的远程数据库主机的$ dbhost变量。