1

オートコンプリート検索のために db からの結果を試します。名前を取得するためにこのコードを使用します.dbには、検索されたキーワードを含むことができる4つの列を持つ行があります.

function search_results($conn,$str){

$sql = "SELECT g_custom_1 as str FROM gallery WHERE  g_custom_1 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_2 as str FROM gallery WHERE  g_custom_2 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_3 as str FROM gallery WHERE  g_custom_3 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_4 as str FROM gallery WHERE  g_custom_4 LIKE '%{$str}%'";


//$sub_data=array();
if (mysqli_multi_query($conn,$sql))
{
    $data=array();
    do
    {
        // Store first result set
        if ($result=mysqli_store_result($conn)) {
        // Fetch one and one row
        while ($row=mysqli_fetch_row($result))
        {
            $data[]=$row['str'];
        }
        // Free result set
        mysqli_free_result($result);
        }
    }
    while (mysqli_next_result($conn));
}
else{
    echo "error";
}
$data_unique=array_unique($data);
return $data_unique;
   }
4

1 に答える 1

0

セミコロンを使用して各クエリを区切る必要があります。現在の文字列は次のとおりです。

$sql="SELECT g_custom_1 as str FROM gallery WHERE  g_custom_1 LIKE '%{$str}%'SELECT g_custom_2 as str FROM gallery WHERE  g_custom_2 LIKE '%{$str}%'SELECT g_custom_3 as str FROM gallery WHERE  g_custom_3 LIKE '%{$str}%'SELECT g_custom_4 as str FROM gallery WHERE  g_custom_4 LIKE '%{$str}%'";

後続のクエリの SELECT が、前のクエリの末尾に押し込まれていることに注意してください。

私は提案するかもしれません:

$sql[]="SELECT g_custom_1 as str FROM gallery WHERE  g_custom_1 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_2 as str FROM gallery WHERE  g_custom_2 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_3 as str FROM gallery WHERE  g_custom_3 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_4 as str FROM gallery WHERE  g_custom_4 LIKE '%{$str}%'";
if(mysqli_multi_query($conn,implode(';',$sql))){

この回答も参考になるかもしれません: Strict Standards: mysqli_next_result() error with mysqli_multi_query

于 2016-11-15T14:14:47.183 に答える