Php oci_bind_by_name()返回错误

Php oci_bind_by_name()返回错误,php,oracle,Php,Oracle,我使用PHP查询oracle数据库,一切都很好,除非我尝试使用oci_bind_by_name替换变量 $link = oci_connect("user","password","server/service"); $sql = "SELECT name FROM customers WHERE name LIKE '%:name%'"; $query= oci_parse($link, $sql); $name = "Bruno"; oci_bind_by_name($query, ":

我使用PHP查询oracle数据库,一切都很好,除非我尝试使用oci_bind_by_name替换变量

$link = oci_connect("user","password","server/service");

$sql = "SELECT name FROM customers WHERE name LIKE '%:name%'";
$query= oci_parse($link, $sql);

$name = "Bruno";
oci_bind_by_name($query, ":name", $name);
$execute = oci_execute($query);
我还试图像这样转义引号,但它返回相同的错误,我认为这是通配符的问题%

$sql = "SELECT name FROM customers WHERE name LIKE \"%:name%\" ";
错误不是特定的:

( ! ) Warning: oci_bind_by_name(): in D:\gdrive\www\sites\pulseiras\php\engine.php on line 30

我想使用“按名称绑定”来避免sql注入,如何使其工作?

OCI将绑定变量插入到查询中,并以如下方式结束:

SELECT name FROM customers WHERE name LIKE '%'Bruno'%'
显然,添加了一些不必要的引用。这是因为绑定变量被视为单个项

绑定前需要修改变量,因此:

$sql = "SELECT name FROM customers WHERE name LIKE :name"; // chars removed.
$query= oci_parse($link, $sql);

$name = "%Bruno%"; // chars added.
oci_bind_by_name($query, ":name", $name);

像往常一样,有很多有用的例子。

令人惊讶的是,大脑似乎只是在将问题发布到stackoverflow上之后才开始工作。事实证明,解决方案是隔离通配符并与变量连接:

$sql = "SELECT name FROM customers WHERE name LIKE '%' || :name || '%' ";
$name = "Bruno";
oci_bind_by_name($query, ":name", $name);
$execute = oci_execute($query);
这个解决方案也很有效:)我和你同时发布,所以我想现在有两种解决方案。非常感谢。