oci_bind_by_name RETURNING INTO сокращает значение - PullRequest
6 голосов
/ 10 ноября 2009

Когда я вставляю строку в таблицу с 1000+ записями и пытаюсь вернуть идентификатор строки (будь то из триггера автоинкремента / seq или из установки значения вручную в операторе вставки), я получаю усеченное значение :

$db = OCILogon(DATABASE_LOGIN, DATABASE_PASSWORD, DATABASE_NAME);

$mysqldate = date('Y/m/d G:i:s');
$db_vid_id = 748;
$authorID = 310;
$typeID = 2;
$timecode = 47;
$shortDescrip = "hello world";


$query = "INSERT INTO TESTTHOUSAND (ID, VIDEO_ID, AUTHOR_ID, TYPE_ID,
          DATE_CREATED, TIMECODE, SHORT_DESCRIPTION, APPROVED, IS_PUBLIC) 
          VALUES(4067, :videoID, :authorID, :typeID, TO_DATE('$mysqldate','yyyy/mm/dd HH24:MI:SS'),
          :timecode, :shortDescrip, 0, 0) 
          RETURNING ID INTO :id";
$stmt = oci_parse($db, $query);
oci_bind_by_name($stmt, ':videoID', $db_vid_id);
oci_bind_by_name($stmt, ':authorID', $authorID);
oci_bind_by_name($stmt, ':typeID', $typeID);
oci_bind_by_name($stmt, ':timecode', $timecode);
oci_bind_by_name($stmt, ':shortDescrip', $shortDescrip);
oci_bind_by_name($stmt, ':id', $theID);
oci_execute($stmt);
oci_free_statement($stmt);
oci_commit($db);
oci_close($db);

echo $theID;

Этот код выполняется правильно, а значения правильно хранятся в базе данных. Однако значение $theID составляет 406, а не 4067.

Я использую PHP 5.2.6 и Oracle 10.1

Кто-нибудь сталкивался с этим раньше?

1 Ответ

10 голосов
/ 10 ноября 2009

Я еще немного покопался, и мне нужно указать, что это SQLT_INT:

oci_bind_by_name($stmt, ':id', $annotationID, -1, SQLT_INT);

С http://www.php.net/manual/en/function.oci-bind-by-name.php#92334

для чисел используйте длину по умолчанию (-1), но скажите оракулу, что это целое число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...