【问题标题】:How to use LIKE in oracle with PHP如何通过 PHP 在 oracle 中使用 LIKE
【发布时间】:2019-08-25 14:46:21
【问题描述】:

我正在尝试使用带有 LIKE 运算符的简单 SQL 语句。此 SQL 语句适用于 SQL 开发人员,但当我在 PHP 上尝试时无效。

SELECT * FROM hotels WHERE lower(name) LIKE '%luxury%';

但是当我在 php 中做同样的事情时,我得到了这个错误:

警告:oci_bind_by_name(): ORA-01036: 非法变量名/编号

PHP 代码:

$sql = "SELECT * FROM hotels WHERE lower(name) LIKE '%:term%'";
$stid = oci_parse($conn, $sql);
$term = "luxury";
oci_bind_by_name($stid, ":term", $term);
oci_execute($stid);

【问题讨论】:

    标签: php sql database oracle


    【解决方案1】:

    您需要将字符串部分与参数连接起来,例如:

    $sql = "SELECT * FROM hotels WHERE lower(name) = '%' || :term || '%'";
    

    NB:您真的要搜索由 litteral '%'s 包围的字符串吗?鉴于问题的标题,您可能正在寻找 LIKE 运算符:

    $sql = "SELECT * FROM hotels WHERE lower(name) LIKE '%' || :term || '%'";
    

    【讨论】:

    • 谢谢。那解决了它。对不起,我在问题中写错了。修复了 OP
    • @Jake:欢迎!如果我的回答正确回答了您的问题,请accept it and upvote it...谢谢!
    • 不幸的是,它不允许我选择它作为答案(需要等待 6 分钟)。但一旦可以,我会选择它
    【解决方案2】:

    您不能将绑定参数放在 SQL 文字字符串 ('') 中。您可以使用LIKE '%' || :term || '%'";,如另一个答案所示,或者您可以在您的PHP代码中附加%

    $sql = "SELECT * FROM hotels WHERE lower(name) LIKE :term";
    $stid = oci_parse($conn, $sql);
    $term = "%" . "luxury" . "%";
    oci_bind_by_name($stid, ":term", $term);
    oci_execute($stid);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 2011-11-01
      • 1970-01-01
      • 2019-09-08
      • 2012-04-29
      • 2014-09-08
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多