JQuery搜索找不到所有记录

时间:2015-04-15 10:04:34

标签: php jquery mysql ajax

我创建了一个页面,您可以在其中搜索数据库(PHP,MySQL,JQuery)。 它工作正常,但我有一个我真的不明白的问题。 如果我搜索“abbandonato”它可以正常工作,但如果我搜索“abband”,“abbando”,“abbandon”,“abbandona”(以及字符串的其他部分)它不起作用。返回的错误(警报中的文本)是“SyntaxError:意外的输入结束”。为什么?如果查询找到“abbandonato”,则查询还必须找到字符串的一部分(“abbando”,“abbandon”,......)。 换句话说,我没有这个问题。

以下是代码:

data2.php

$(function() {
                // Funzione per l'autocomplete
                $("#formSearch").submit(function(e) {
                    //Annulla default form action
                    e.preventDefault();

                    var ricerca= $("#tbSearch").val();

                    // Se il campo ricerca non è vuoto carico i dati
                    if ($("#tbSearch").val().length > 0) {
                        $('#searchResults').html("Caricamento...");
                        $.ajax({                                      
                            url: 'data3.php',                  
                            method: 'POST',
                            asynch: false,
                            data: {
                                dati: 1,
                                ricerca:ricerca
                            },        // Argomenti mandati in POST

                            dataType: 'json',                  
                            success: function(data) {
                                $('#searchResults').html("Caricamento...");

                                var stringa = "";
                                for(var i in data) {
                                    stringa += '<tr><td>' + data[i]['disc'] + '</td>';
                                    stringa += '<td>' + data[i]['frm'] + '</td>';
                                    stringa += '<td>' + data[i]['lex'] + '</td></tr>';
                                }

                                $('#searchResults').html(stringa);
                            },
                            error: function(xhr, status, error) {
                                alert(error);
                            }
                        });
                    }
                });
            });

data3.php

<?php   
require('inc/db_connection.php');


$dati = $_POST["dati"];

if($dati == 1) {

    // Query    
    $result = mysql_query("SELECT tab1.disc, tab1.frm, tab2.lex lex
                           FROM tab1, tab2 
                           WHERE tab1.disc = tab2.disc
                           AND BINARY LOWER(frm) LIKE BINARY LOWER('" . trim($_POST["ricerca"]) . "%')
                           LIMIT 0,500");
    // Array per AJAX
    $array_risultati = array();

    if (mysql_error())
        echo json_encode(array(mysql_error()));
    else {
        // Popolazione $array_risultati
        while ($row = mysql_fetch_assoc($result)) {
            $array_risultati[] = $row;
        }

        echo json_encode($array_risultati);
    }
}

3 个答案:

答案 0 :(得分:0)

尝试:

...LOWER(frm) LIKE BINARY CONCAT(LOWER('" . trim($_POST["ricerca"]), '%') . "')...

我认为正在发生的事情是LOWER()正在转换'%'并且可能会导致问题。将'%'移出LOWER(),看看会发生什么。

答案 1 :(得分:0)

您没有在PHP代码中传递JSON标头。 在json_encode

之前添加以下代码
header('Content-Type: application/json');

答案 2 :(得分:0)

尝试从查询中删除BINARY并尝试使用

mysql_query("SELECT tab1.disc, tab1.frm, tab2.lex lex
                FROM tab1, tab2 
                WHERE tab1.disc = tab2.disc
                AND LOWER(frm) LIKE LOWER('".trim($_POST["ricerca"])."%')
            LIMIT 0,500");

可能会BINARY%转换为附加到您的搜索值的其他代码,并生成一些在您的数据库中找不到的其他单词。

供您参考阅读Lesser Known MySQL Performance Tips

  

如果您需要进行区分大小写的匹配,请将列声明为   BINARY;不要在查询中使用LIKE BINARY来转换非二进制文件   柱。如果你这样做,MySQL就不会使用该列上的任何索引。