如何使用PHP OCI8预处理语句和绑定参数

问题描述 投票:0回答:1

因此,使用预处理语句和绑定参数是用于编写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);

    ?>
php sql database oci8
1个回答
1
投票

是的,它可以使用OCI8参数化查询的SQL语句。

oci_bind_by_name结合PHP变量到Oracle绑定变量占位符bv_name。绑定是Oracle数据库的性能很重要,也可以作为一种方式,以避免SQL注入安全问题。

结合减少SQL注入问题,因为有一个绑定变量相关的数据永远不会作为SQL语句的一部分进行处理。它不需要引用或转义。

阅读更多here

 <?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);

    ?>
© www.soinside.com 2019 - 2024. All rights reserved.