【问题标题】:Using PHP, MSSQL, Jquery for instant search使用 PHP、MSSQL、Jquery 进行即时搜索
【发布时间】:2011-09-06 18:02:13
【问题描述】:

我正在尝试使用 PHP、jQuery 和 MS SQL 数据库实现即时搜索功能。老实说,我不确定我遇到的问题是什么。我没有收到任何 php 错误,我唯一可能想到的是与数据库的连接存在一些混淆。我有 Windows Server 2003 上的文件,我试图访问另一台运行 Windows Server 2008 的服务器上的 MSSQL 数据库。我对这些服务器以及像这样在它们之间进行编程完全是新手。 (我是一名 IT 实习生。)这是我正在使用的代码,它是根据用于创建即时搜索的教程修改的。这是我目前的代码。

PHP 文件:

<?php
if(!empty($_GET['q'])) {
search();
}

function search() {
$server = 'Windows2008ServersName';
$con = mssql_connect($server, 'username', 'password')
    or die("Couldn't connect to SQL Server on $server");
mssql_select_db('dbname', $con);

$q = str_replace("'","''",$_GET['q']);
$sql = mssql_query("
    SELECT
        db.First_Name, SUBSTR(db.Last_Name,1,300)
    FROM db
    WHERE db.First_Name LIKE '%{$q}%' OR db.Last_Name LIKE '%{$q}%'
    ")
or die ( 'Query Error' );

//Create an array with the results
$results=array();
while($v = mssql_fetch_object($sql)){
    $results[] = array(
      'title'=>$v->title,
      'post'=>$v->post
    );
}

//using JSON to encode the array
echo json_encode($results);
}
?>

Javascript 文件:

var runningRequest = false;
var request;

//Identify the typing action
$('input#q').keyup(function(e){
    e.preventDefault();
    var $q = $(this); //get the letter

    //if it's not a search term return false
    if($q.val() == ''){
        $('div#results').html('');
        return false;
    }

    //Abort opened requests to speed it up
    if(runningRequest){
        request.abort();
    }

    runningRequest=true;
    request = $.getJSON('search.php',{
        q:$q.val()
    },function(data){           
        showResults(data,$q.val());
        runningRequest=false;
    });

//Create HTML structure for the results and insert it on the result div
function showResults(data, highlight){
       var resultHtml = '';
        $.each(data, function(i,item){
            resultHtml+='<div class="result">';
            resultHtml+='<h2><a href="#">'+item.title+'</a></h2>';
            resultHtml+='<p>'+item.post.replace(highlight, '<span     class="highlight">'+highlight+'</span>')+'</p>';
            resultHtml+='<a href="#" class="readMore">Read more..</a>'
            resultHtml+='</div>';
        });

        $('div#results').html(resultHtml);
    }

    $('form').submit(function(e){
        e.preventDefault();
    });
});

HTML 文件:

<html>
<head>
    <title>Instant Search</title>
    <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="js/search.js"></script>
<style> /*css*/  </style>
</head>
<body>
    <form method="get" action="">
        <input type="text" id="q" name="q" />
    <input type="submit" value="Search" />
    </form>

   <div id="results"></div>

</body>
</html>

PHP 安装在 Web 服务器上,但我不确定它是否安装在 MSSQL 服务器上,这可能是问题吗?我不太熟悉需要如何设置服务器才能相互协作。尤其是在这样的情况下。

【问题讨论】:

  • 它有什么作用?如果它根本没有做任何事情,那么你的javascript有问题。
  • 这需要一些调试。如果您在 keyup 处理程序中放置一个 alert() ,它会触发吗?如果你 alert() 你从 PHP 页面的响应,它会显示什么?
  • 两者都没有。它没有访问我的 PHP 文件吗?

标签: javascript php sql-server


【解决方案1】:

不要认为你想要 javascript 中 q var 上的“$”;它可以被允许(我不认为是,但我没有尝试过),但这不是必需的,而且很混乱。

可能还有更多,但这对我来说很糟糕。

【讨论】:

  • 我正在使用MSSQL,所以我不认为我可以使用那个功能?我的印象是$q = str_replace("'","''",$_GET['q']); 会处理好它
  • 哈哈错过了。是的,您没有用于 mssql 的功能。引号替换通常被认为是 SQL Server 最简单的转义符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多