autocomplete не работает с Oracle, хотя работает с mysql
пользователь вводит символы в поле, 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 onLoad="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>
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 onLoad="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");
}
}
}
}
?>
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. разница только в операторах, с помощью которых происходит обращение к БД.
Проверь правильность запроса, ошибка там.
$r=OCIExecute($q);
$res2=oci_fetch_assoc($q)