SQL错误,警告:`oci_execute()`:ORA-00996:连接运算符是||,而不是||在C:\ wa

时间:2015-08-31 08:42:56

标签: php sql oracle concatenation

我正在努力执行这个sql

$tarifekatalogcwsql=oci_parse($conn,'select TARIFE_ID, HIZMET_TURU, ALT_HIZMET_TURU, KAYIT_TARIHI, OM_TARIFE_ID from SMARTTBILL.TARIFE_KATALOG_CW 
        WHERE HIZMET_TURU='.$rowisemriabonecw[0].' AND ALT_HIZMET_TURU='.$rowisemriabonecw[1].' AND OM_TARIFE_ID='.$rowisemriabonecw[4].'');

您可以考虑使用sql语句。当我执行此查询时,它返回我在标题中写的错误。

在我的数据库表中,我有一些值包括' |'因此,系统给了我这样的错误。

OM_TARIFE_ID='.$rowisemriabonecw[4].'这是问题的根源。 OM_TARIFE_ID='1|1' $rowisemriabonecw[4]='1|1' 两者都相同,但系统会考虑' |'字符作为连接字符串。

你能为这个案子提供帮助吗?我该如何处理这个问题?

1 个答案:

答案 0 :(得分:3)

试试这个:

$tarifekatalogcwsql=oci_parse(
    $conn,
    'select TARIFE_ID, HIZMET_TURU, ALT_HIZMET_TURU, KAYIT_TARIHI, OM_TARIFE_ID from SMARTTBILL.TARIFE_KATALOG_CW WHERE '
    .'HIZMET_TURU = "' . $rowisemriabonecw[0] . '" AND '
    .'ALT_HIZMET_TURU = "' . $rowisemriabonecw[1] . '" AND '
    .'OM_TARIFE_ID = "' . $rowisemriabonecw[4] . '"'
);

但您的方法是进行 SQL注入的最简单方法!

这是正确的方法:

$tarifekatalogcwsql=oci_parse(
    $conn,
    'SELECT TARIFE_ID, HIZMET_TURU, ALT_HIZMET_TURU, KAYIT_TARIHI, OM_TARIFE_ID '
    .' FROM SMARTTBILL.TARIFE_KATALOG_CW '
    .'WHERE HIZMET_TURU = :HIZMET_TURU '
    .'  AND ALT_HIZMET_TURU = :ALT_HIZMET_TURU '
    .'  AND OM_TARIFE_ID = :OM_TARIFE_ID'
);

oci_bind_by_name($tarifekatalogcwsql, ":HIZMET_TURU", $rowisemriabonecw[0]);
oci_bind_by_name($tarifekatalogcwsql, ":ALT_HIZMET_TURU", $rowisemriabonecw[1]);
oci_bind_by_name($tarifekatalogcwsql, ":OM_TARIFE_ID", $rowisemriabonecw[4]);

文档:oci-bind-by-name