2017-07-05 32 views
0

初めて質問しました。私は現在、姓と名が別々のデータベースを検索しようとしています。例:PHPでmysqlにクエリを実行中にフルネームを検索できません

player_id | first_name | last_name 
    191   John   Smith 
    192   Larry   Citizen 
    193   Benjamin  Example 

私は、ユーザーがフルネームのみを使用してこのリストを検索できるようにしようとしています。ユーザーがsubmitを押すと、私は現在、次のコードを持っています。それはusersearch.phpを呼び出します。

session_start(); 

include '../con.php'; 

$player = $_POST['name']; 

$sql = "SELECT * FROM characters WHERE (concat(first_name,' ',last_name)) = ($player)"; 

$result = mysqli_query($conn, $sql); 

if (!$row = mysqli_fetch_assoc($result)) { 

    echo "Found no-one with the name $player. <a href='../search.php'>Try Again?</a>"; 

} else { 

    $_SESSION['selplate'] = $row['plate']; 
    $_SESSION['selname'] = $row['first_name, last_name']; 

    header("Location: ../profile.php?player=$player"); 

} 

クエリーに関係なく、ユーザーが見つからず、常に「$ playerという名前の誰も見つかりませんでした。

これはこのプロジェクトの簡単な部分であると考えられていましたが、私は髪を引き出しています。

私はSOとGoogleの検索に1時間以上費やしているので、私のコードでなければなりません。それはうまくいくはずです。

+0

私たちはどのように検索するのかを教えてください。 –

+0

[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [MySQLi](http://php.net/manual)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学びます。 /en/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+1

プレイヤーの名前は何ですか?あなたは何の名前を探していますか、見つからないレコードは何ですか?私はちょうど... – ArtisticPhoenix

答えて

0

あなたはそれがテキストであり、またconcatinatedなので、プレーヤーの周りにqoutesが必要です。 あなたがJohnsmithを検索する場合は、ジョン・スミスを検索する場合、あなたの連結にあなたは言葉

"SELECT * FROM characters WHERE concat(first_name,' ',last_name) =('".$player."')" 
0

クエリ内のconcat関数から空白を削除すると、$player = $_POST['name']の代わりに$player = str_replace(' ','',trim($_POST['name']))が使用されます。私は準備された文とPDOを示唆して

$SQL = "SELECT * FROM TABLE_NAME WHERE concat(first_name,last_name) = '".$player."'"

...

は、あなたが「ベンジャミン例」を検索していると、クエリは「ベンジャミン例」そうstr_replace意志出力 benjaminexampleとして.AND concatedのfirst_nameをチェックすると仮定last_nameはそれにマッチします。

願っています。 それがばかげていると無視します。

+0

「ベンジャミン」の例はそれを見つけることができますか? – ArtisticPhoenix

+0

私は確かにそれはwilll .. –

0

の間にスペースを追加しているので、それは私がフルテキストに変更します、それは結果としてあなたを与えるだろう何も を返しません姓と名の両方に索引を付けるには、フルテキスト索引でminを変更します。私は(名前としていくつかの男)を使用して検索します

MATCH(first, last)AGAINST('+"some" +"guy"' IN BOOLEAN MODE) 
関連する問題