mysqli prepare select query with OR operator dons';不起作用


mysqli prepare select query with OR operator doesn't work

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

这个概念是,当一个用户想与另一个用户开始对话时,我会在conversation表中插入一条具有4行唯一id的记录:

  • id
  • user_one
  • user_two
  • date

我想做的是:当用户登录时,获取从登录创建的用户名会话,然后使用mysqli准备的语句和select查询,检查该用户是否与另一个用户在conversation表中。如果是,请附加DIV.

我面临的问题是,对于查询字符串,尤其是OR运算符,这似乎不起作用。我想在查询中做的是:如果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();
}

我找到了解决方案。

代替:

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

     }

而且有效!