我具有類似於下面的代碼:的Postgres/PHP PDO :: PDOStatement-> bindParam()以字符(1)字段
$data['someField'] = (isset($_POST['someField'])) ? 'Y' : 'N';
$stmt = $db->prepare("INSERT INTO public.someTable (someField) VALUES (':someField');");
$stmt->bindParam(':someField', ($data['someField']), PDO::PARAM_STR, 1);
$db->beginTransaction();
$stmt->execute();
$db->commit();
該字段是一個字符(1),其中包含Y或N(我寧願使用bool/int(1),但我不能改變這種情況)。正如你所看到的,這將從HTML表單獲取POST數據,並根據複選框設置Y或N.當我回應它時,該變量看起來正確設置。查詢工作,如果我手動把一個「Y」或「N」到語句,但使用bindParam()我收到以下錯誤時:
SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character(1)
真正奇怪的是,即使我做這樣的事情:
$stmt->bindParam(':someField', substr($data['someField'], -1), PDO::PARAM_STR, 1);
我仍然得到錯誤。從在php.net功能頁面上的用戶評論:
Steve M 19-Nov-2009 07:28 Note that when using PDOStatement::bindParam an integer is changed to a string value upon PDOStatement::execute(). (Tested with MySQL).
還有就是這個沒有再提起,或者對如何避開任何事情。我假設這是問題的根源。我也嘗試過使用bindValue()而沒有任何改變。