一、問題:
laravel5.5中
static::find($id);
報錯
SQLSTATE[HY000]: General error: 2036 (SQL: select * from `…)
可以肯定的是,sql是正確的。那問題出在哪裏。
二、 解決
找到了三種解決辦法。
1、關閉laravel mysql的嚴格模式(config/database.php strict項),
不過這樣子會出現一個小小的問題,就是數據類型的約束不能在進行模型操作時拋出異常了,例如數據表中有content字段,數據類型varchar(32),通過Eleqount模型創建一條數據,如果content字段字符長度在插入時超過32,將不會再拋出異常了,但是真實插入到MySQL的時候將會被截斷成32
2、將php的mysql驅動從 php-mysql 更換爲 php-mysqlnd
(這是一個php擴展,用於操作數據庫的驅動,可以用帶代替php-mysql)
3、在config/database.php添加PDO::ATTR_EMULATE_PREPARES => true
'mysql' => [
/* ... */
'options' => [PDO::ATTR_EMULATE_PREPARES => true]
],
但是我自己測,第一種方法不管用。第二種略顯麻煩。所以找到了第三種。採用了第三種。
It’s ok.