我在我們的mysql數據庫中存儲64位Facebook ID。當我查看數據庫表的值是32位。我正在使用Laravel和PDO連接。這些值如果傾倒出來,在綁定中是正確的。一旦執行,它們在數據庫中不同。我曾嘗試將數據庫從MariaDB更改爲MySQL,以查看它是否是導致它的數據庫。一切都指向它是PDO。使用PDO從64位轉換爲32位的整數
這不會發生在我的本地開發機器上,它使用的是完全相同的PHP 7.0.15
版本。我在開發或本地方面都沒有錯誤。
MySQL和PHP是64位版本。我一直無法找到任何有助於我解決問題的方法。
我發現自2013年起this bug report,這清楚地說明了我的問題,但似乎已經解決。
在Laravel的Connection類中,bindValues
方法正在檢查數據類型。
public function bindValues($statement, $bindings)
{
foreach ($bindings as $key => $value) {
dump($value); // Value is correct at this point.
$statement->bindValue(
is_string($key) ? $key : $key + 1, $value,
is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR
);
}
}
我自己也嘗試設置第三個參數去只是PDO::PARAM_STR
但是這並沒有改變行爲。
服務器是CentOS Linux 7.3.1611
,MySQL是5.7.17
,PHP 7.0.15
PDO和MySQL擴展
php70w-pdo.x86_64 7.0.15-1.w7 @webtatic
php70w-mysql.x86_64 7.0.15-1.w7 @webtatic
該表是InnoDB
與UTF-8 Unicode
編碼和核對是utf8_unicode_ci
SQL連接是:
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'modes' => ['STRICT_TRANS_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','ERROR_FOR_DIVISION_BY_ZERO','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'],
'engine' => null,
我可以嘗試解決我的問題?
什麼是列類型? – AbraCadaver
該列是一個varchar(100)。我嘗試了BIGINT,並且出現了超出範圍的錯誤。 – brenjt
你必須展示你如何得到並回應它,因爲它應該工作得很好,因爲它們是字符串,除非你施放它們,計算它們等等...... – AbraCadaver