【问题标题】:INNER JOIN block user and then friends table to remove userINNER JOIN 阻止用户,然后使用朋友表删除用户
【发布时间】:2014-08-21 01:14:05
【问题描述】:

我知道 PHP 在使用 INNER JOIN 时会变得相当复杂。我尝试了一些想法,但似乎没有任何效果。

这就是我正在努力的方向 当用户 A 阻止用户 B 时,用户 B 被从他们的朋友中删除。

所以我有这个并且有一个错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'user1_id=15 AND user2_id=3 AND status=1 附近使用正确的语法 INNER JOIN 在块上的朋友。 DELETE fro' 在第 1 行

谁能完整解释内部连接,并告诉我哪里出了问题,以备将来使用。

$query = mysqli_query($mysqli,"INSERT INTO block user1_id=$user1_id AND user2_id=$user2 AND status=1
INNER JOIN friends ON block. 
DELETE from friends where user1_id=$user1_id AND user2_id=$user2 AND status=2 ")
or die (mysqli_error($mysqli));

【问题讨论】:

  • 为什么在插入时使用INNER JOIN

标签: php mysqli inner-join


【解决方案1】:

你的 SQL 搞砸了。 (这不是 PHP 的错)。

请看一下MySQL INSERTMySQL DELETE 的语法。我也不明白你在INSERT 声明中的INNER JOIN
MySQLi 还只允许您在每个查询中执行 1 个命令(关于安全性和良好设计?)

INSERT 应该是这样的(我不知道你的表结构,所以我在这里假设一下:

INSERT INTO block (user1_id, user2_id, status) VALUES ('$user1_id', '$_user2_id', 1)

除此之外,您的 DELETE 查询看起来还不错。只要确保它在它自己的mysqli_query() 中。

【讨论】:

    【解决方案2】:

    应该使用两种不同的语句,并且您必须使用参数化查询。

    $sql_insert = "INSERT INTO block (user1_id, user2_id, status) values (?,?,1)";    
    $stmt = $mysqli->prepare($sql_insert);
    $stmt->bind_param("s", $user1_id);
    $stmt->bind_param("s", $user2_id);
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    
    $sql_delete = "DELETE FROM friends where user1_id=? AND user2_id=? AND status=2 "
    $stmt = $mysqli->prepare($sql_delete);
    $stmt->bind_param("s", $user1_id);
    $stmt->bind_param("s", $user2_id);
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    

    【讨论】:

    • 感谢您的帮助和帮助,没有让我失望。现在更有意义了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多