0

我正在尝试在我的 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 。

谁能帮我?

4

1 回答 1

0

3,123.03

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

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

于 2018-07-11T12:31:32.950 回答