2014-10-29 65 views
0

我使用Laravel在Windows工作站上,并在Linux,我运行只用下面的行测试:同样DB,不同的工作站会导致不同类型(Laravel,MySQL的)

echo gettype(Patient::find(11)->case_id); 

我已经添加了此列是这样的:

$table->integer('case_id'); 

在db是在Linux,我从窗户远程连接。

结果:“整数”,在Linux机器上:在Windows机器上“串”

(这引起了可怕的错误,我用===期待它是整数...)

有没有想法?

回答

1

区别在于不同的MySQL驱动程序从数据库中提取提取的数据的方式。
更具体地说,在Linux情况下只使用字符串。

来解决这个问题,最快的方式是使用比较看起来像:
($case_id == 5) // true而不是($case_id === 5) // false假设$case_id="5";

也许Linux驱动程序也可以被调整回不仅字符串。
如果您提供驱动程序的具体信息,也许有人可以帮助您更好地调整驱动程序。

如果你使用的是PDO,那么这些将帮助:

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

第二行无关,与字符串,但建议。

+0

感谢您的回复!你能确保我明白你在说什么,看看这是否是相关的线程? http://stackoverflow.com/questions/20079320/php-pdo-mysql-how-do-i-return-integer-and-numeric-columns-from-mysql-as-int – NiRR 2014-10-29 09:15:07

+0

@NiRR检查更新 – 2014-10-29 12:36:03