【问题标题】:ORACLE Doesnt accept variables in PHPORACLE 不接受 PHP 中的变量
【发布时间】:2014-04-17 14:37:25
【问题描述】:

我有这个代码,

$head_mark = $_POST["headmark"];
$id = $_POST["headmark_id"];

 $cuttingUpdateParse = oci_parse($conn, "UPDATE FABRICATION SET CUTTING = $cutting_done
                                  WHERE HEAD_MARK = $head_mark AND ID = $id");

不知何故,oracle 不想接受这种代码。我从萤火虫那里得到的消息是

警告:

警告:oci_execute(): ORA-00904: "TEST1": 第 33 行 C:\xampp\htdocs\WeltesInformationCenter\update_bar\process_class.php 中的标识符无效

请帮我提出您的建议,与HEAD_MARK 关联的数据类型是VARCHAR2(15)。我假设我们需要进行某种字符串转换,以便 oracle sql 可以读取它。

【问题讨论】:

  • OCI 扩展支持参数化语句。使用它们。见php.net/manual/function.oci-bind-by-name.php
  • @Daan 这是一些非常糟糕的建议
  • @Phil 确实有效,但我正在使用 OCI PDO,效果很棒。
  • @Phil 参数化语句不适用于 OCI。
  • @ponciste 再说一次,我说完全是垃圾。你告诉我他们是如何“无法正常工作”,我会吃掉我的帽子。在我通过 OCI 扩展使用 PHP 和 Oracle 的 3 年中,我从未有过参数化语句 not work

标签: php oracle plsql


【解决方案1】:

正如我在评论中提到的,您应该使用带有参数绑定的准备好的语句。这避免了手动引用您的值的需要,并提供了一种安全的方式来使用它们,而不必担心 SQL 注入。

例如...

$stmt = oci_parse($conn, 'UPDATE FABRICATION SET CUTTING = :cutting_done
                          WHERE HEAD_MARK = :head_mark AND ID = :id');
oci_bind_by_name($stmt, ':cutting_done', $cutting_done);
oci_bind_by_name($stmt, ':head_mark', $head_mark);
oci_bind_by_name($stmt, ':id', $id);
oci_execute($stmt);

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多