1

thisthisなどの他の投稿を見てきましたが、私の特定のケースでは何も機能しません。

次のようなテーブルがあります。

|    Name    |    Reference    |    Etc...    |
|------------|-----------------|--------------|
|  John Doe  |                 |  Blah blah   |
|  Jane Doe  |   John Doe      |  Blah blah   |
| Mike Small |   Jane Doe      |  Blah blah   |
|  Steve Ex  |   John Doe      |  Blah blah   |
| Mary White |   Mike Small    |  Blah blah   |

どの名前が別の名前の参照でもあるかを見つけ、それらをリンクに変換して、ユーザーがそれらをクリックして、これが参照されている名前のリストを取得できるようにしたいと考えています。

たとえば、ユーザーが John Doe をクリックすると、次のような表が表示されます。

|    Name    |    Reference    |    Etc...    |
|------------|-----------------|--------------|
|  Jane Doe  |   John Doe      |  Blah blah   |
|  Steve Ex  |   John Doe      |  Blah blah   |

現在、私はここで立ち往生しています:

function find_items_by_ref($ref) {
  db_connect();
  $query = sprintf("SELECT * FROM items WHERE reference LIKE '%s'", mysql_real_escape_string($ref));
  $result = mysql_query($query);
  $row = mysql_fetch_array($result);
  return $row;
}

LIKECONTAINSなどを試してみましlike '%' || TEXT || '%'たが、何も機能しません。何かアイデアはありますか?


以下の回答で両方の可能性を試しています。最初のもので、私はいくつかの問題を抱えています。echoSQL Select から取得した配列の要素が必要な場合、警告が表示されます: Illegal string offset 'X' ... エラー。var_dump取得した配列の 1 つで実行すると、次のようになります。何が悪いのかよくわかりません。私には作業配列のようです:

array (size=16)
0 => string '37' (length=2)
'id' => string '37' (length=2)
1 => string 'Steve Ex' (length=8)
'name' => string 'Steve Ex' (length=8)
2 => string 'John Doe' (length=8)
'reference' => string 'John Doe' (length=8)
3 => string 'Blah blah' (length=9)
'etc' => string 'Blah blah' (length=9)

わかった。解決しました。そして、問題はとてもばかげていました...誰が本当のお尻のように感じていると思いますか. とにかく、問題は、SQL行が1行の場合に数値を渡そうとしていたことです。ユーザーが ID を介して単一の行に関する情報を取得したいときに使用していた Select 関数を誤ってコピーしてしまいました。問題は常にそこにあり、木の後ろに隠れているゾウのように、私はそれを見逃していました. とにかく、それは...申し訳ありません。作業コードは次のとおりです。

function find_items_by_ref($ref) {
  db_connect();
  $query = sprintf("SELECT * FROM items WHERE INSTR(reference,'".mysql_real_escape_string($ref)."')>'0' ORDER BY name ASC");
  $result = mysql_query($query);
  $result = db_result_to_array($result);
  return $result;
}

@dimaninc の助けに感謝します!

4

1 に答える 1

6
function find_items_by_ref($ref) {
  db_connect();
  $query = "SELECT * FROM items WHERE INSTR(reference,'".mysql_real_escape_string($ref)."')>'0'";
  $result = mysql_query($query);
  $row = mysql_fetch_array($result);
  return $row;
}

この場合、INSTR は LIKE よりも高速です

または、LIKE が必要な場合は、正しく使用する必要があります。

$query = "SELECT * FROM items WHERE reference LIKE '%".mysql_real_escape_string($ref)."%'";
于 2013-06-29T22:00:47.203 に答える