Oracle-00972:标识符太长我的SQL出了什么问题?

 <?php 

//这将数据连接保留在$ conng require_once(' /tms/http/html_docs/tease/csp/csp_tease.php');
nn / *这是一个记录功能。 当调用:

  • /

函数log_tkt_to_db($ tkt_number,$ date,$ uid,$ description,$ conng)
{
echo“$ tkt_number | $ date | $ uid | $ description< br> ;“;

$ sqlinsert =”插入TEASE_TKTLOGS VALUES(\“$ tkt_number \”,\“$ date \”,\“$ description \”,\“$ uid \”)“;
echo $ sqlinsert。 “< br>”;
$ insert = OCIParse($ conng,$ sqlinsert);
// OCIExecute($ insert,OCI_COMMIT_ON_SUCCESS);
OCIExecute($ insert);
}

log_tkt_to_db(“ 00000000“,”07/13/2012“,”jt898u“,”这是一个测试,这只是一个测试“,$ conng);
?>

</ code> </ pre>

我收到此输出:</ p>

  00000000 | 07/13/2012 | jt898u |这是一个测试, 这只是一个测试
insert到TEASE_TKTLOGS(TICKET,DATE_TIME,CHANGE_DESC,ATTUID)VALUES(“00000000”,“07/13/2012”,“这个测试,这只是一个测试”,“jt898u”)

警告:ociexecute()[function.ociexecute]:ORA-00972:第17行的/appl/tms/http/html_docs/tease/dblog.php中的标识符太长
</ code> </ pre>
</ DIV>

展开原文

原文

<?php

// This leaves the db connection in $conng require_once('/tms/http/html_docs/tease/csp/csp_tease.php');

    /* This a logging function. When called with:
     */

    function log_tkt_to_db($tkt_number, $date, $uid, $description, $conng)
    {
        echo "$tkt_number|$date|$uid|$description<br>";

        $sqlinsert = "insert into TEASE_TKTLOGS  VALUES ( \"$tkt_number\", \"$date\", \"$description\",  \"$uid\")";
        echo $sqlinsert . "<br>";
        $insert = OCIParse($conng, $sqlinsert);
        // OCIExecute($insert, OCI_COMMIT_ON_SUCCESS);
        OCIExecute($insert);
    }

log_tkt_to_db("00000000", "07/13/2012", "jt898u", "this a test, this is only a test", $conng);
?>  

I get this output:

00000000|07/13/2012|jt898u|this a test, this is only a test
insert into TEASE_TKTLOGS (TICKET, DATE_TIME, CHANGE_DESC, ATTUID) VALUES ( "00000000", "07/13/2012", "this a test, this is only a test", "jt898u")

Warning: ociexecute() [function.ociexecute]: ORA-00972: identifier is too long in /appl/tms/http/html_docs/tease/dblog.php on line 17

dsvjw20866
dsvjw20866 看看由于某些原因导致此错误:coderanch.com/t/80098/Oracle-OAS/ORA-identifier-too-long-at
大约 8 年之前 回复
douning5041
douning5041 请发布您的架构
大约 8 年之前 回复

1个回答



这里有很多错误。</ p>


  1. 最简单的答案是 你需要使用单引号('</ code>)而不是双引号(参见字符串文字</ em> B19306_01 / server.102 / b14200 / sql_elements003.htm #i42617“rel =”noreferrer“> Oracle数据库SQL参考)</ li>
  2. 你真的应该使用像 oci_bind_by_name </ code> 而不是盲目地将您的值插入查询 。 为您节省解析和潜在的SQL注入。</ li>
  3. ociparse </ code> ociexecute </ 自PHP 5.4起,代码> 已弃用。 您应该分别使用 oci_parse </ code>和 oci_execute </ code>。</ li>
    </ ol>
    </ div>而不是这些。

展开原文

原文

There are multiple things wrong here.

  1. The simplest answer is that you need to use single quote marks (') instead of double quotes (see String Literals in Oracle Database SQL Reference)
  2. You really should use something like oci_bind_by_name instead of blindly inserting your values into the query. Saves you a parse and a potential SQL injection.
  3. ociparse and ociexecute are deprecated as of PHP 5.4. Instead of these you should use, respectively, oci_parse and oci_execute.

douzi2778
douzi2778 3)旧版安装/代码。 PHP是5.2.4。 所有现有代码都使用ociparse(),所以我也这样做了。
大约 8 年之前 回复
dongyan6503
dongyan6503 1)我后来发现coderanch.com/t/80098/Oracle-OAS/ORA-identifier-too-long-at,其中提到由于引用而导致的错误消息。
大约 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐