我正在尝试在我的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一样显示。
有人可以帮助我吗?
答案 0 :(得分:0)
3,123.03
这不是数字文字,而是两个数字3
和123.03
,其中一个显然被解释为列名。删除数字文字表达式中的分组,
或使用TO_NUMBER()
和带有格式化数字表示形式的字符串文字。
但是,最好的方法不是通过字符串连接来构建查询,而是通过参数化查询来构建查询。字符串连接容易产生SQL Injection。参数化查询还可以自动(通常且大部分)为DBMS找到正确的表示形式,从而避免了您在此处遇到的此类问题。