php - 包含外语字母时未找到数据库中的单词

时间:2011-11-28 12:07:52

标签: php mysql

在我网站的词汇表的admin部分,我写了一个ajax函数,它在插入表单之前检查mysql数据库中是否有相同术语的现有条目,以避免重复输入。

该功能有效,但仅在术语不包含任何外语字符时才有效。该网站的主要语言是法语,因此有很多这样的语言。数据库表以latin1_swedish_c1(默认)编码。

JS

$('input[id=term]').live('focusout',function(){
        var element = $(this).attr('id');
        var term = $(this).val();
        if(term != ""){
        // alert(term);
        $(this).closest('tr').children().eq(2).load('ajax/term_chk.php', {'term':term}, function(data){
        $(this).html(data);
        });
        }
        });

PHP term_chk.php调用以下函数:

function checkTerm($term)
{
$qry = "select * from trm where term = '".addslashes($term)."' limit 1";
$qry_res = mysql_query($qry);
if(mysql_numrows($qry_res) > 0)
{
    $t = mysql_fetch_assoc($qry_res);
    $checkStr = '<span style="background-color: #F00; padding: 1px 10px">ID '.$t['id'].'</span>';
} else {
    $checkStr = '<span style="background-color: #5BB26B; ; padding: 1px 10px">OK</span>';
}
return $checkStr;
}

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

三件事:

  1. 症状可能通过网页的字符编码来解释。例如,如果网页是UTF-8但MySQL连接字符集是Latin-1,那么查询将不起作用,因为每个多字节字符将被解释为一系列字符。
  2. addslashes()不足以防止SQL注入。使用特定于数据库连接的功能,例如mysql_real_escape_string()。更好的是,更新到PDO或mysqli库; mysql库已经过时了。
  3. 排序规则的名称为latin1_swedish_ci,而不是latin1_swedish_c1