当尝试插入此问题时,会产生我。 使用未定义的常量SEQUENCE_ID_PROBLEMA假定为SECUENCIA_ID_PROBLEMA

我不知道问题出在哪里,请帮忙。

我的Oracle序列:

<code>
CREATE SEQUENCE INFORMACION.SECUENCIA_ID_PROBLEMA
 START WITH 0
 MAXVALUE 9999999999999999999999999999
 MINVALUE 0
 NOCYCLE
 NOCACHE
 NOORDER;
</code>

我在PHP中的代码:

<code>
$sql = "INSERT INTO $tabla (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
      SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES (?, ?, ?, ?, ?, ?, ?)"; 
$stmt = odbc_prepare($Conex, $sql); 
$success = odbc_execute($stmt,[SECUENCIA_ID_PROBLEMA.nextval,$HORA_INICIO,$PROBLEMA, $CAUSA,SOLUCION,sysdate, $ID_ASIGNACION] );
</code>

#1楼 票数:0 已采纳

PHP和SQL是完全不同的语言,您得到的是由PHP解释器触发的PHP警告:

define('FOO', 3.1416);
echo FOO; // 3.1416
echo BAR; // Warning: Use of undefined constant BAR - assumed 'BAR' (this will throw an Error in a future version of PHP)

您的代码尝试将序列名称作为动态输入处理。 您不能为此使用准备语句,因为准备语句的全部目的是防止这种情况的发生。 如果确实需要,则需要使用纯字符串函数生成基本的SQL框架:

$table = 'PROBLEMA';
$sequence = 'SECUENCIA_ID_PROBLEMA';
$sql = "INSERT INTO $table (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
      SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES ($sequence.nextval, ?, ?, ?, ?, ?, ?)";
INSERT INTO PROBLEMA (ID_PROBLEMA, HORA_INICIO, PROBLEMA, CAUSA, 
          SOLUCION, HORA_FIN, ID_ASIGNACION) VALUES (SECUENCIA_ID_PROBLEMA.nextval, ?, ?, ?, ?, ?, ?)

但是,您的代码也尝试向动态绑定变量提供固定的硬编码文本。 我想知道这种额外的复杂性是否是有意的和必要的。 具有相同的确切列名的不同表有潜在的代码味道:)

#2楼 票数:-1

最后,您不能使用php中的序列。 我所做的是在Oracle Data Bae中创建一个触发器,以便在插入新行时执行该序列

<code>
CREATE SEQUENCE INFORMACION.SECUENCIA_ID_PROBLEMA
 START WITH 0
 MAXVALUE 9999999999999999999999999999
 MINVALUE 0
 NOCYCLE
 NOCACHE
 NOORDER; 

CREATE TRIGGER problema_on_insert
 BEFORE INSERT ON PROBLEMA
 FOR EACH ROW
BEGIN
 SELECT SECUENCIA_ID_PROBLEMA.nextval
 INTO :new.ID_PROBLEMA
 FROM dual;
END;
</code>

  ask by Jordy Morales translate from so

未解决问题?本站智能推荐:

1回复

PHP:为Oracle的odbc_connect函数创建一个dsn

我有关oracle数据库的信息我需要通过easyphp连接到php使用如下:用户,密码,主机,端口,服务。 我尝试使用函数odbc_connect的新东西,但我不断收到错误只是因为我不知道如何制作一个dsn。 虽然,我尝试使用这个: 但我完全忽略what does {DataDirec
1回复

如何在Oracle中使用PHP-ODBC上传文件?

我一直在做,我知道连接有效,我将在另一个项目中对其进行测试。 但是现在我需要使用ODBC在php中的oraclo中处理blob数据,但是我不知道该怎么做。 我从Oracle得到错误:[Oracle] [ODBC] [Ora] ORA-00972:标识符太长... 代码:PHP与ora
1回复

如何使用ODBC在PHP上调用Oracle存储过程

我正在尝试使用ODBC在PHP网站上调用Oracle存储过程。 我有一个名为“员工”的表。 我想在网站上查看员工总数。 下面我描述从sql正常运行的功能,过程和pl / sql。 功能: 此功能将计算雇员表中的所有条目。 然后将值存储在 t_emp 程序: 此过程将运
3回复

PHP,Oracle和ODBC:如何检查结果集是否为空?

亲爱的书呆子和论坛者, 我在带有ODBC驱动程序的Oracle数据库上遇到了一个美味的PHP问题。 首先是代码: 如果我取消测试,我总是回来-1! 无论语句是否产生0,1或5行...... 因此,如果没有结果,1个结果或更多结果返回,使用此代码我永远无法获取信息。 你对如何
2回复

使用PHP-ODBC处理CLOB列

我维护一个旧应用程序,该应用程序在Windows Server 2003下的PHP / 5.2.6上运行,并通过ODBC连接到远程Oracle 10g服务器。 我正在编写一个需要CLOB列的新功能,以便它可以存储任意大的文本,但是我找不到通过良好的旧ODBC函数操作它的方法。 对于写作,我
1回复

OracleOCI语句与ODBC语句的差异。(PHP)

使用 PHP 连接到数据库时,我一直在使用带有以下查询的 ODBC 连接: 其中表名是TAB.LE 。 这里不需要用于进行查询的代码 - 但它可以正常返回正确的结果。 当我使用 OCI 连接时,相同的查询失败: 我经常在屏幕上看到failed 。 我很难过为什么。 奇怪的是:表名TAB.LE适用于
1回复

无法使用PHP从Oracle数据库写入我的csv文件

我想我正确使用了 fputcsv。我的数据库表包含两列,两列中都有日期和数字。 我使用 oracle 数据库和 windows 2008 服务器。
1回复

ODBC调用未定义函数App\\Http\\Controllers\\odbc_connect()

如何获取我的PHP来谈论ORACLE数据库? 我已经安装了Instantclient_11_2和unixODBC ODBC.ini如下 odbcinst.ini如下 php.ini中 PHP警告 isql -v错误