2014-10-29 23 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