doushi1912
2019-04-03 23:48
浏览 62

如何在PHP中使用oracle中的LIKE

I am trying to use a simple SQL statment with the LIKE operator. This SQL statement works on SQL developer but not when I try it on PHP.

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

However when I do the same thing in php I get this error:

Warning: oci_bind_by_name(): ORA-01036: illegal variable name/number

PHP Code:

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

图片转代码服务由CSDN问答提供 功能建议

我正在尝试使用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); 
   
 
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duanqing2209 2019-04-03 23:51
    已采纳

    You would need to concatenate the string parts with the parameter, like :

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

    NB: do you really want to search for a string surrounded by litteral '%'s? Given the title of the question, you might be looking for the LIKE operator instead:

    $sql = "SELECT * FROM hotels WHERE lower(name) LIKE '%' || :term || '%'";
    
    点赞 评论
  • douzizang7783 2019-04-04 00:27

    You can't put a bind parameter inside of a SQL literal string (''). You can use LIKE '%' || :term || '%'"; as shown in the other answer, or you can append % in your PHP code:

    $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);
    
    点赞 评论

相关推荐 更多相似问题