草庐IT

php - 模式搜索的 Ajax 回调问题

coder 2023-10-13 原文

大家好,我有一个问题,我正在从 abc.php 调用一个 ajax 搜索脚本,MySQL 查询工作正常,但是当我通过 ajax 搜索时,它给出了所有结果

这是 MySQL 查询:

$query = "select * from tableName where column1 like '%pattern%' or column2 like '%pattern' or column_n like '%pattern'"; 

这是我的 Ajax 代码

function showHint(str) {    
  if (str.length==0) { 
    document.getElementById("txtHint").innerHTML="";

    return;
  }
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("txtHint").innerHTML=this.responseText;     
    }
  }  
  xmlhttp.open("GET","abc.php?q="+encodeURIComponent(str),true);

  xmlhttp.send();
}

这是我的 abc.php

<?php
include "databaseconnect.php";
$id = trim($_GET['q']);

        $res = $con->prepare('select count(*) from tablename where column = 1 AND (column = ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ?)');
        $res->execute(array("$id","%$id%","%$id%","%$id%","%$id%","%$id%","%$id%","%$id%"));

        if($res->fetchColumn() > 0) {

    $query = $con->prepare('select * from tablename where column = 1 AND (column = ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ? OR column like ?)');
        $query->execute(array("$id","%$id%","%$id%","%$id%","%$id%","%$id%","%$id%","%$id%"));
?>
<?php
while($row = $query->fetch(PDO::FETCH_ASSOC)){

    print_r($row);
}
        }

?>

这是我的 HTML 代码

<form onsubmit="return false;"> 
<input type="text" autocomplete="off" autofocus="autofocus" onkeyup="showHint(this.value)" class="form-control input-lg gap-top" placeholder="Search for...">
</form>
<div class="container-fluid">
<div class="table-responsive">
<p><span id="txtHint"></span></p>

最佳答案

好的,我要写下稍微不同的代码:

在MySQL中:

CREATE TABLE `test`.`words` (
`wordid` INT NOT NULL AUTO_INCREMENT,
`word_one` VARCHAR(45) NULL,
 `word_tow` VARCHAR(45) NULL,
 PRIMARY KEY (`wordid`));

INSERT INTO `test`.`words` (`word_one`, `word_tow`) VALUES ('a', 'd');
INSERT INTO `test`.`words` (`word_one`, `word_tow`) VALUES ('ab', 'de');
INSERT INTO `test`.`words` (`word_one`, `word_tow`) VALUES ('abc', 'def');

在 HTML 中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>StackOverFlow</title>

    <script
            src="https://code.jquery.com/jquery-3.4.1.min.js"
            integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
            crossorigin="anonymous">
    </script>
    <script type="text/javascript" src="app.js"></script>
</head>
<body>
<form onsubmit="return false;">
    <input type="text" autocomplete="off" autofocus="autofocus"  class="form-control input-lg gap-top" placeholder="Search for...">
</form>
<div class="container-fluid">
    <div class="table-responsive">
        <p><span id="txtHint"></span></p>

</body>
</html>

在 JavaScript(app.js) 中:

$(document).ready( function(){

    $('.form-control.input-lg.gap-top').keyup(function() {

        let fd = new FormData();
        let word = $(this).val();

        fd.append('my_word', word);


        $.ajax({
            url: "abc.php",
            type: "POST",
            data: fd,
            processData: false,
            contentType: false,

            complete: function (results) {
                try {
                    let str = JSON.parse(results.responseText);
                    console.log(str)
                } catch (e) {
                    console.error(e);
                }
            },
        });


    }) ;


});

在 PHP(abc.php) 中:

<?php

$host = '127.0.0.1';
$dbname = 'test';
$username = 'kmoshe';
$password = 'password';
$charset = 'utf8';
$collate = 'utf8_unicode_ci';

$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=$charset", $username, $password,
    array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_PERSISTENT => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"
    )
);


$word_to_find = $_REQUEST['my_word'];

$stmt = $pdo->prepare("SELECT * FROM words WHERE word_one like :w");
$stmt->execute(['w' => "%$word_to_find%"]);


$array_of_words = [];

while($row = $stmt->fetch()) {
    $array_of_words[] = $row['word_one'];
}

echo json_encode($array_of_words);

关于php - 模式搜索的 Ajax 回调问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089414/

有关php - 模式搜索的 Ajax 回调问题的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  5. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  6. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  7. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  8. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  9. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  10. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

随机推荐