在我的数据库中,有一个名为“Chat”的表。我打算在这里存储应用程序中用户之间发送的每条消息。首先,我必须将它们存储在一个列表中(只需简单地执行aSELECT * FROMColumnText WHERE OneID ='$OneID'并从与我有消息的其他用户那里收集所有ID),但是现在我很难完成最后一部分,即一旦我看到了这两个用户之间的消息,单击一行。
SELECT * FROMColumnText WHERE OneID ='$OneID'
我的计划是通过如下所示的呼叫收集信息:
http://myURL.com/Chat.php?UserOneID=1548&UserTwoID=1724
其中一个用户具有ID 1548,另一个具有ID 1724。
1548
1724
我看到的第一个问题是,我将知道谁发送了该消息。然后我做了,可能会起作用的是改为执行以下操作:
首先将ID重命名为更清晰的名称SenderID,RecieverID然后将数据重命名为如下所示的位置:
SenderID
RecieverID
SenderID = 1548 RecieverID = 1724
SenderID = 1548
RecieverID = 1724
和
SenderID = 1724 RecieverID = 1548
SenderID = 1724
RecieverID = 1548
我为它编写了如下代码,其中我使用aUNION尝试收集两个ID的数据,而不仅仅是一个ID,调用看起来像这样:
UNION
http://myURL.com/Chat.php?SenderID=1548&RecieverID=1724 http://myURL.com/Chat.php?RecieverID=1548&SenderID=1724 <?php class ConnectionInfo { public $conn; public function GetConnection() { $this->conn = mysqli_connect("serv", "user","pass", "db") or die(mysqli_error($mysql_pekare)); } } $connectionInfo = new ConnectionInfo(); $connectionInfo->GetConnection(); if (!$connectionInfo->conn) { echo 'No Connection'; } else { $SenderID = $_GET['SenderID']; $RecieverID = $_GET['RecieverID']; $query = "(SELECT * FROM ColumnText WHERE SenderID = '$SenderID') UNION (SELECT * FROM ColumnText WHERE RecieverID = '$RecieverID')"; $stmt = mysqli_query($connectionInfo->conn, $query); if (!$stmt) { echo 'Query failed'; } else { $contacts = array(); while ($row = mysqli_fetch_array($stmt)) { $contact = array("Messages" => $row['Messages']); array_push($contacts, $contact); } echo json_encode(array('results' => $contacts), JSON_PRETTY_PRINT); } } ?>
问题在于“ UNION”似乎无法解决问题。SenderID即使RecieverID与我发送给脚本的数据不匹配,我似乎也只能从该行中获取所有数据。
我当前的方法是正确的方法吗?如果是,我将如何调整我的phpscript才能使其正常工作?
你为什么不只使用一个OR?那么结果有正确的接收者和正确的发送者吗?并且您收到了从X到Y的所有消息以及从Y到X的所有消息
OR
您的查询行将如下所示:
$query = "SELECT * FROM ColumnText WHERE (SenderID = '$SenderID' AND RecieverID = '$RecieverID') OR (SenderID = '$RecieverID' AND RecieverID = '$SenderID')鈥�;
此外,我强烈建议您使用准备好的陈述