如何在 PHP oci8 中使用准备好的语句和绑定参数
How to use prepared statements and bound parameters in PHP oci8
因此,使用准备好的语句和绑定参数是编写 sql 语句的建议方式。 Oci8 手册没有描述如何使用准备好的语句来完成。
下面是如何 return 查询的下一行作为对象,但这不是最佳做法,因为查询字符串可以包含 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 语句的一部分。它不需要引用或转义。
阅读更多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);
?>
删除第 14 行 :dpid
之后的 space
正确的语法 => oci_bind_by_name($stid, ':dpid', $didbv);
因此,使用准备好的语句和绑定参数是编写 sql 语句的建议方式。 Oci8 手册没有描述如何使用准备好的语句来完成。
下面是如何 return 查询的下一行作为对象,但这不是最佳做法,因为查询字符串可以包含 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 语句的一部分。它不需要引用或转义。
阅读更多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);
?>
删除第 14 行 :dpid
之后的 space
正确的语法 => oci_bind_by_name($stid, ':dpid', $didbv);