簡體   English   中英

如何在 PHP oci8 中使用准備好的語句和綁定參數

[英]How to use prepared statements and bound parameters in PHP oci8

因此,使用准備好的語句和綁定參數是編寫 sql 語句的建議方式。 Oci8手冊沒有描述如何使用准備好的語句來做到這一點。

下面是如何將查詢中的下一行作為對象返回,但這不是最佳實踐,因為查詢字符串可以包含where col = $PHPvariable

<?php

    $conn = oci_connect('hr', 'welcome', 'localhost/XE');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    $select_sql= oci_parse($conn, 'SELECT id, description FROM mytab');
    oci_execute($select_sql);

    while (($row = oci_fetch_object($select_sql)) != false) {
        // Use upper case attribute names for each standard Oracle column
        echo $row->ID . "<br>\n";
        echo $row->DESCRIPTION . "<br>\n"; 
    }

    oci_free_statement($stid);
    oci_close($conn);

    ?>

是的,可以對您的 sql 語句使用 oci8 參數化查詢。

oci_bind_by_name將 PHP 變量綁定到 Oracle 綁定變量占位符 bv_name。 綁定對於 Oracle 數據庫性能很重要,也是避免 SQL 注入安全問題的一種方式。

綁定減少了 SQL 注入問題,因為與綁定變量關聯的數據永遠不會被視為 SQL 語句的一部分。 它不需要引用或轉義。

在這里閱讀更多。

 <?php

    $conn = oci_connect("hr", "hrpwd", "localhost/XE");
    if (!$conn) {
        $m = oci_error();
        trigger_error(htmlentities($m['message']), E_USER_ERROR);
    }

    $sql = 'SELECT last_name FROM employees WHERE department_id = :dpid ';

    $stid = oci_parse($conn, $sql);
    $didbv = 60;

    oci_bind_by_name($stid, ':dpid ', $didbv);
    oci_execute($stid);

    while (($row = oci_fetch_object($stid)) != false) {
        echo $row->last_name ."<br>\n";
    }


    oci_free_statement($stid);
    oci_close($conn);

    ?>

后除去空間:dpid線14上正確的語法=> oci_bind_by_name($stid, ':dpid', $didbv);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM