php - oci_bind_by_name RETURNING INTO 截断值

标签 php sql database oracle

当我向包含 1000 多个条目的表中插入一行并尝试返回行 ID(无论是来自自动增量触发器/序列,还是来自在插入语句中手动设置值)时,我得到一个截断值:

$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

有人遇到过这个吗?

最佳答案

我做了更多的挖掘,看来我需要指定这是一个 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

for numerics use the default length (-1) but tell oracle its an integer

关于php - oci_bind_by_name RETURNING INTO 截断值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710617/

相关文章:

php - SEO 友好的 .htaccess RuleRewrites

mysql - 如何使用引用在mysql中编写级联查询

sql - 删除 SQL 中的 CONSTRAINT 花费的时间太长

python - 带有 MultiIndex 列的 Pandas to_sql 索引

php - 使用csv文件创建表到数据库mysql

PHP - 数据库模式 : version control, 分支、迁移

javascript - 尝试加载大视频但收到 '503 Service Unavailable'

php - Mysql - 按相关性排序查询,无需全文方法

php - mysql_connect 在 XAMPP 中不工作

sql - COUNT 正在输出多行