2016-04-04 6 views
0

PHPでFaceBookのような受信ボックスメッセージングシステムを作成しています。このため、私はconversationinbox_messagesという2つのテーブルをMySQLデータベースに作成しました。mysqliがOR演算子を使って選択クエリを作成できない

  • id
  • user_one
  • user_two

    コンセプトは、ユーザーが別のユーザーとの会話を開始したいとき、私は4行を持っているユニークなIDを持つconversationテーブルにレコードを挿入しています

  • date

私がしたいこと:ユーザーがログインするときに、ログインから作成されたユーザー名セッションを取得し、mysqliのプリペアドステートメントと選択クエリで、ユーザーがconversationテーブルに別のものがあるかどうかを確認します。そうであれば、DIVに追加してください。

私が直面している問題は、クエリ文字列で、特にOR演算子では、動作しないようです。クエリで何をしたいのですか:user_one$_SESSION['username']と等しい場合、または$_SESSION['username']と等しい場合、ログインしたユーザがテーブル行user_oneまたは行user_twoに会話IDを追加する場合は同じです。

$par1 = $_SESSION['username']; 
$par2 = $_SESSION['username']; 

//$par1 and $par2 holds the same name 

$query = "SELECT id FROM conversation WHERE user_one = ? OR user_two = ?"; 

if ($stmt = $mysqli->prepare($query)) { 

    $stmt->bind_param("ss", $par1, $par2); 
    $stmt->execute(); 
    $stmt->bind_result($id); 
    $stmt->fetch(); 

    if ($stmt->num_rows == 1) { 
     echo $id; 
    } 

    $stmt->free_result(); 
    $stmt->close(); 
} 
+0

http://php.net/manual/en/mysqli.error.phpとhttp://php.net/manual/en/function.error-reporting.php のリンクを参考にしてください。コード。 –

+0

私はそれを行いますが、質問したいのですが、私の$クエリは正しいですか、多分書き方を変えるべきでしょう。初めてOR演算子を使うからです。 –

+0

クエリ自体は大丈夫です。他のテーブルとの関係をモデリングするのではなく、そのテーブル内のuser_oneとuser_twoですが、とにかく....)。あなたが得た結果はどのようなもので、どのように期待通りのものからずれていますか? – VolkerK

答えて

0

解決策が見つかりました。

の代わりに:

if ($stmt = $mysqli->prepare($query)) { 

    $stmt->bind_param("ss", $par1, $par2); 
    $stmt->execute(); 
    $stmt->bind_result($id); 
    while ($stmt->fetch()) { 
     echo $id; 

    } 


    $stmt->free_result(); 
    $stmt->close(); 


    } 

そして作品:

if ($stmt = $mysqli->prepare($query)) { 

    $stmt->bind_param("ss", $par1, $par2); 
    $stmt->execute(); 
    $stmt->bind_result($id); 
    $stmt->fetch(); 

    if ($stmt->num_rows == 1) { 
     echo $id; 
    } 

    $stmt->free_result(); 
    $stmt->close(); 


    } 

私はそれを交換!

+0

* "'あなたのSQL構文に誤りがありますが、あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして、近くの '?' "*で使用する正しい構文を確認してください。*これは、 。 –

+0

はい、 '$ stmt-> num_rows == 1'の部分が奇妙に見えますが、実際のエラーメッセージについては説明していません。 (あなたはその間にクエリを手がかりにしていて、ある点でそれとは無関係のエラーがあったと仮定します) – VolkerK

+0

@ Fred-ii-ありがとうございました –

関連する問題