• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLとPHPの組み合わせ。検索できない?)

MySQLとPHPの組み合わせで検索できない原因は何か?

このQ&Aのポイント
  • MySQLとPHPを組み合わせて掲示板を作成していますが、あるユーザーの書き込みだけが検索できない状態です。
  • 文字コードの問題やメールアドレスの文字化けは確認済みであり、再現も困難です。
  • ユーザーがiPhoneを使用していることに関連性があるかもしれませんが、具体的な原因は分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

前回の質問では「メッセージだけセッションに入れていた」ということなのですよね。名前やメールもセッションに入れていたのならまだ気づきやすかったでしょうに。衝撃的なつくりに感じました…。 それをふまえての今回の問題だと、また作りの問題で不可解な現象が起きている可能性が高いのではないかと思います。 なのでこれも、決め付け・思い込みは排除して事実の確認をしましょう。ヒットするしないというのはPHPで2つの文字列を比較しif文で判断しているのですかね。もしそうなら、ログ形式で日時と記事IDか何かと、文字列Aと文字列Bとその比較結果をファイルに書き込むようにしてみてください。SQLで検索してレコード件数が0なら…みたいなロジックでも同じように、検索時の条件のメールアドレスと検索結果を記録するようにしましょう。 それをすれば、文字列Aと文字列Bが違うと判断されヒットしないのか、もしくはヒットした後ではじく処理ではじきもれているのかなど切り分けが出来るでしょう。 動作確認をしていませんがこんな感じの関数を作って。 function logging($id, $strA, $strB) {   $datetime = date("Y/m/d H:i:s T (P)", time());   $client_ip = $_SERVER["REMOTE_ADDR"];   $result = ($strA == $strB);   $msg = "[{$datetime}] [{$client_ip}] [${id}] [${strA}] [${strB}] [${result}]\n";   error_log($msg, 3, REQUEST_LOG); }

noname#235729
質問者

お礼

 if文ではなく、MySQLのクエリの中でヒットするレコードをカウントして1以上ならという形ですね。  恥ずかしながら、PHP、MySQLともに勉強を始めて半年ほどでして、pringlezさんから提示していただけるような確認のための関数などの知識が決定的に欠落しています(^_^;  それ以前に作り始めた時と今現在での知識の差も影響していまして、今ソースを読み返すとなんでこんな作りにしたのか自分でも疑問に思うほどカオスな状態になっていて、もうどこで何をしているのかが分からない状況です。  ですので、結局最初から作り直すことにしました(^_^;  せっかくアドバイスいただいたのに何だか申し訳ありません。  教えていただいた関数などは今後の参考とさせていただきます。  ご回答ありがとうございました。

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

なお、同一内容かどうかを確認するときには下記のようにしてみてください。ブラウザ画面での表示では同じに見えても、これが異なっていれば「違う文字列」です。 // $str に格納されているとして $arr = array(); for ($i=0; $i < strlen($str); $i++) { $arr[] = sprintf('%02x', ord(substr($str, $i, 1))); } print implode(':', $arr) . '<br>';

noname#235729
質問者

お礼

ご回答ありがとうございました。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>まったく同じメールアドレスで、 バイナリで1バイトも相違がないことを確認されていますか? 「画面に表示したら同じように見える」というだけであれば、前後の空白が残っている(trimせずに格納したり比較している)とか何らかの非可視コードが混入している可能性を排除出来ません(htmlソース上では改行とかタブとかも非可視コードになりますしね)。

noname#235729
質問者

お礼

 trimは使ってないんですが、一応どこかの関数で空白削除する機能を盛り込んでるらしく、半角全角ともに空白はついていませんでした。  ご回答ありがとうございました。

関連するQ&A