Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

autocomplete не работает с Oracle, хотя работает с mysql

62K
01 сентября 2010 года
cyklop77
3 / / 31.08.2010
подскажите пожалуйста в чем моя ошибка? дело в следующем: пытаюсь использовать JQ-библиотеку autocomplete. выборка значений производится из БД racle.
пользователь вводит символы в поле, ajax отправляет sql-запросы к БД.
но результирующего набора в выпадающем списке не получаю.
так же пхп выдаёт warning: oci_fetch_assoc () expects parameter 1 to be resource, string given

вот код, если кому интересно.

Код:
<?php
header('Content-Type: text/html; charset=utf-8');
session_start();
//phpinfo();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><?='Проверка' ?></title>
    <link rel="stylesheet" type="text/css" href="../main.css" />
    <script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="../js/jquery.autocomplete.js"></script>
    <script type="text/javascript" src="../js/migalka.js"></script>
</head>
<body &#111;&#110;Load="changeColor()">
<?php
include("../header.php");







?>

<br/>
<br/>
<center>
<table><tr align='left'><td>Населённый пункт: </td><td>

<input type="text" tabindex="0" id="example" /></td></tr>
</table>
<br/>
<div id="migalka"><div style="text-decoration: blink;">Введите название населённого пункта</div></div>


</center>
<br />

<script type="text/javascript">
    $(document).ready(function()
    {
        // --- Автозаполнение ---
        $("#example").autocomplete("autocomplete.php",
        {
            delay:400,
            minChars:2,
            matchSubset:1,
            autoFill:false,
            matchContains:1,
            cacheLength:10,
            selectFirst:true,
            formatItem:liFormat,
            maxItemsToShow:-1,
            onItemSelect:selectItem,
            width: 300
        });
        // --- Автозаполнение ---

        function liFormat (row, i, num)
        {
            var result = row[0];
            return result;
        }

        function selectItem(li)
        {
            if( li == null ) var sValue = 'А ничего не выбрано!';
            if( !!li.extra ) var sValue = li.extra[2];
            else var sValue = li.selectValue;
            var H = (navigator.appName == 'Microsoft Internet Explorer') ?
            (new ActiveXObject ('Microsoft.XMLHTTP')) : (new XMLHttpRequest ());
            H.open ('get', '../city.php?str1='+sValue); H.send (null);
            location.href='../a2/autocomplete_.php';//+sValue;
        }


    });
</script>
<?php

    echo("<pre>");
    print_r($_SESSION);
    echo("</pre>");

?>
</body>
</html>


Код:
<?php
header('Content-Type: text/html; charset=utf-8');
//header('Content-Type: text/html; charset=windows-1251');
session_start();
error_reporting(E_ALL);
ini_set ("error_reporting", E_ALL);
ini_set ("display_errors", "on");

define("ORA_DBNAME", "");
define("ORA_DBLOGIN", "");
define("ORA_DBPASSWORD", "");//правильное значение
define("ORA_TNSNAME", "(DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
      )
      (CONNECT_DATA =
          (SERVICE_NAME = )
      )
)"
);

   $c=oci_connect(ORA_DBLOGIN, ORA_DBPASSWORD, ORA_TNSNAME, "UTF8");


    $sql="select * from punkts p join rajons r on p.rajon_key=r.rajon_id where p.punkt_name like '%".$_GET['q']."%'";
    $q = OCIParse($c, $sql);
    $r=OCIExecute($q);
    if(!$r)
    {
        $e=oci_error($q);
        echo($e['code']);
        exit;
    }



    $_SESSION['query']=$sql;
    $_SESSION['q']=$_GET['q'];


if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  if($_GET['q'])
  {
    while($res2=oci_fetch_assoc($q))
    {
        echo($res2['PUNKT_NAME']."<br>");
        $res = mb_strpos(mb_strtolower($res2['PUNKT_NAME'],"UTF-8"), mb_strtolower($_GET['q'],"UTF-8"));
        if($res!=false)
        {
            print ($res2['PUNKT_TYPE']."  ".$res2['PUNKT_NAME']."  \n");
        }
    }
  }
}

?>


еще добавлю, что тот же самый скрипт почти в том же самом виде без проблем работает с mysql. разница только в операторах, с помощью которых происходит обращение к БД.
1.8K
01 сентября 2010 года
trivium
128 / / 31.01.2010
Проверь правильность запроса, ошибка там.
366
02 сентября 2010 года
int
668 / / 30.03.2005
Не разбираюсь в работе с ораклом, но может вторую $q сменить на $r?

$r=OCIExecute($q);
$res2=oci_fetch_assoc($q)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог