使用OR运算符的mysqli准备选择查询不起作用

时间:2016-04-04 12:02:08

标签: php mysqli prepared-statement or-operator

我正在使用PHP创建一个收件箱邮件系统,就像FaceBook一样。出于这个原因,我在MySQL数据库中创建了2个表,称为conversationinbox_messages

这个概念是当用户想要与另一个用户开始对话时,我将记录插入conversation表,其中唯一ID包含4行:

  • id
  • user_one
  • user_two
  • date

我想做什么:当用户登录时,抓取从登录创建的用户名会话,然后使用mysqli预备语句和选择查询,检查用户是否在conversation与另一个表。如果是这样,请加入DIV。

我面临的问题是查询字符串,尤其是OR OPERATOR,似乎不起作用。我想在查询中做的是:如果user_one等于$_SESSION['username']或者user_two等于$_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();
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

而不是:

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();


     }

我将其替换为:

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();


     }

并且有效!