2015-03-31 5 views
1

Я пытаюсь использовать функцию oci_bind_by_name связать PHP переменных в SQL даное, но он не работает, это мой кодфункция oci_bind_by_name не работает при использовании его как п

 $keyword="'%test%'"; 
    $stmt=oci_parse($connection,"SELECT * 
    FROM tableName where id=:id and (dataDetails like :key1 or textData like :key1 or name like :key1) and lang = :lang "); 
      oci_bind_by_name($stmt, ':id', $id); 
      oci_bind_by_name($stmt, ':key1', $keyword); 
      oci_bind_by_name($stmt, ':lang', $lang); 
      oci_execute($stmt, OCI_DEFAULT); 

после загрузки $ STMT это дай мне ничего. что не так? любая помощь?

+1

Может быть, вы не разрешено использовать один и тот же PlaceHolder несколько раз. Попробуйте использовать ': key1',': key2', ': key3'. – Barmar

+0

Кроме того, '' ключевое слово '' имеет подстановочные знаки? Если нет, вам, вероятно, нужно выполнить '$ keyword = '%'. $ Keyword. '%''. – Barmar

+0

Я попытался использовать: key1,: key2 и: key3 то же самое, а ключевое слово переменной $ имеет подстановочный знак в виде $ keyword = "'% test%'"; исправьте меня, если я ошибаюсь –

ответ

2

Вы должны связать свою ценность без одинарные кавычки, а затем сцепить ваше связанное значение для типа сравнения:

$keyword="test"; 
$stmt=oci_parse($connection,"SELECT * 
FROM tableName where id=:id and (dataDetails like '%' || :key1 || '%' or textData like '%' || :key1 || '%' or name like '%' || :key1 || '%') and lang = :lang "); 
     oci_bind_by_name($stmt, ':id', $id); 
     oci_bind_by_name($stmt, ':key1', $keyword); 
     oci_bind_by_name($stmt, ':lang', $lang); 
     oci_execute($stmt, OCI_DEFAULT);