[英]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.