【问题标题】:PHP - ORA-01747: invalid user.table.column, table.column, or column specificationPHP - ORA-01747: 无效的 user.table.column、table.column 或列规范
【发布时间】:2018-12-19 11:50:28
【问题描述】:

我正在尝试在我的 oracle 数据库中更新一个名为 RAC_PV 的表,但是当我运行我的应用程序时查询返回了该错误。我认为一切都是正确的,因为我在 sqldeveloper 上运行相同的查询(但使用手动值)并且当我将变量 $preco_medio 更改为像 1 这样的数字时,它可以在应用程序上运行。这是我的代码:

$preco_medio = number_format(($v_interna_real / $encargo + $vipe_real) / $v_interna_t + $vipe_t , 2, ",", ".") ;

sc_exec_sql("update RAC_PV set PRECO_MEDIO = $preco_medio where rac_anopv = {ano} and rac_mespv = {mes} and codempresa = $id_empresa and codpainel = 6 and cod_prod1 = '$id_produto'");

我的表名和列名是正确的并且检查过,我的变量像 {ano}、{mes}、$id_produto 和 $preco_medio 都是正确设置的。这个 sc_exec_sql("query here") 工作正常。也许问题出在 $preco_medio ?我从来没有使用过这个 number_format,但是当回显这个数字时,这个数字对我来说是正确的,比如 3,123.03 。

谁能帮帮我?

【问题讨论】:

    标签: php sql oracle ora-01747


    【解决方案1】:

    3,123.03

    这不是数字文字,而是两个数字,3123.03,其中一个显然被解释为列名。删除数字文字表达式中的分组, 或使用TO_NUMBER() 和带有格式化数字表示的字符串文字。

    然而,最好的方法不是通过字符串连接构建查询,而是通过参数化查询。字符串连接容易出现SQL Injection。此外,参数化查询(通常和大部分)会自动找到 DBMS 的正确表示,避免您在此处遇到的此类问题。

    【讨论】:

    • 我测试了它,它可以工作,我怎么没想到呢? !!!非常感谢您的帮助。关于查询上的字符串连接,情况并非如此......我有两个组合,用户只选择年份和月份,我在查询中使用这些来为我带来在我的主查询中使用它的值。但这是一个很好的建议,谢谢。
    猜你喜欢
    • 2012-03-16
    • 2013-04-28
    • 2015-05-01
    • 2013-10-21
    • 2016-10-25
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多