我有这种奇怪的崩溃,试图用几个小时来解决但没有成功,在互联网上到处检查并没有找到解决方案。
我正在运行Eloquent(没有laravel)。我有两个服务器(前端和后端)。 DB位于后端服务器中。
我正在运行完全相同的代码,使用来自两台服务器的laravel连接到数据库。从后端服务器一切正常。在前端服务器中,我得到了混合结果。在9个表中:
来自#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致命错误)?
答案 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变量。