【问题标题】:PHP UTF-8 search not workingPHP UTF-8 搜索不起作用
【发布时间】:2024-04-26 04:05:02
【问题描述】:

出于某种奇怪的原因,我无法搜索非英文字符。剧本死了。我想它会在搜索中死去。空白页,一半布局,PHP 脚本后什么都没有。

代码是从一个工作站点(我自己的)复制的,减去布局,所以它应该工作。但事实并非如此。

在 search.php 上:

<meta charset='utf-8' />

在表格上:

<form action='search.php' method='get' accept-charset='utf-8'>

在 db_connect.php 上:

mysqli_set_charset($db_connect, "utf8");

关于数据库: utf8_general_ci

我还缺少什么?

search.php(结果页面):

<?php

include ("php/form.php");

$searchTerm = trim ($_GET['keyname']);

if (!empty ($searchTerm)) {
    if (strlen ($searchTerm) > 2) {
        include "php/search.php";
        } else {
            echo "<h1>Enter 3 or More Characters</h1><hr />$search_form";
            };
    } else {
        echo "<h1>Enter Search Term</h1><hr />$search_form>";
        };

?>

php/search.php:

$query = "SELECT * FROM members WHERE first_name LIKE '%$searchTerm%' OR
                                      last_name LIKE '%$searchTerm%' OR
                                      date LIKE '%$searchTerm%'";

$results = mysqli_query ($db_connect, $query)
           or die (mysqli_error (db_connect));

if (mysqli_num_rows ($results) >= 1) {
    $record = "";
    while ($row = mysqli_fetch_array ($results)) {
        include "result.php";
        } echo $record . "<hr />$search_form</main>";
    } else {
        echo "<h1>0 Matching Records</h1><hr />$search_form";
        };

错误:

“like”操作的排序规则的非法混合

【问题讨论】:

  • mysqli 已过时,请改用 PDO。并且不要忘记清理您的输入。
  • 到底是怎么回事?它会给出错误吗?还是返回一个空集?
  • mysql_escape_string() 用于$searchTerm
  • 它死了,就像一个 exit()。没有错误,至少没有显示。并且布局在该脚本中的某处中断。
  • 包含来自result.php 的代码或执行error_reporting(E_ALL) 以查看错误。

标签: php database search utf-8


【解决方案1】:

您的代码一团糟 - 或者您因错误而匆忙复制/粘贴。

首先是您的查询:

$query = " SELECT * FROM members WHERE first_name LIKE '%".mysqli_real_escape_string($db_connect, $searchTerm)."%' ";

注意 mysqli_real_escape_string - 你需要的最低限度的清理。

那么结果:

$results = mysqli_query ($db_connect, $query) or die (mysqli_error ($db_connect));

你弄乱了 mysqli_ 和 mysql_(在 die 函数中)。不好。

现在,如果这两个更改对您没有帮助,请尝试将其放在脚本的最顶部,高于其他所有内容:

error_reporting(E_ALL);
ini_set('display_errors', '1');

这应该可以帮助您查明代码中的任何 php 错误。

【讨论】:

  • :o 是的,完全错过了 mysqli。给我Illegal mix of collations for operation 'like'。另一个给了一大堆。还有,$server_connect 是什么? $db_connect?
【解决方案2】:

发现问题。需要修复...

date LIKE '%$searchTerm%' 不工作。破坏代码。到目前为止,我已经尝试将LIKE 更改为=,删除%,放入mysqli_real_escape_string ($db_connect , $searchTerm)

对于数据库字段,它是一个日期类型。

“like”操作的排序规则的非法混合

【讨论】:

    最近更新 更多