Postgres / PHP PDO :: PDOStatement-> bindParam () karakter (1) alan

0 Cevap php

Ben aşağıdaki benzer bir kod var:

$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();

Alan içeren bir karakter (1) ya bir Y veya N (ben değil bir bool / int (1) kullanmak istiyorum, ama ne yazık ki değiştiremezsiniz). Gördüğünüz gibi, bu bir HTML formundan POST verileri alır ve bir onay dayalı Y veya N ayarlayın. Değişken bunu echo düzgün ayarlanmış görünüyor. Ben elle deyimi içine bir 'Y' veya 'N' koyarsanız sorgu çalışır, ancak bindParam () kullanırken aşağıdaki hatayı alıyorum:

SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character(1)

Ben böyle bir şey yapmak bile gerçekten garip bir şey:

$stmt->bindParam(':someField', substr($data['someField'], -1), PDO::PARAM_STR, 1);

Ben hala hata alıyorum. Php.net de işlevi sayfasında kullanıcı yorumlarından:

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).

Başka bu söz, ya da etrafında almak nasıl bir şey yoktur. I am varsayarak bu sorunun bu kök. Ben de hiçbir değişiklik ile () bindValue kullanarak denedim.

0 Cevap