首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建MySQL OR?

如何构建MySQL OR?
EN

Stack Overflow用户
提问于 2011-07-18 07:25:09
回答 2查看 85关注 0票数 0

我在我的一个网站上创建了一个迷你社交网络,这样用户就有了“朋友”之类的东西。

我的表看起来像这样:

代码语言:javascript
复制
    |   id   |     f1    |    f2   |   status   |
    ----------------------------------------------
    | 000001 | username1 |username2|     0      |
    | 000002 | username4 |username7|     1      |

我不得不写一个查询来检查他们是否是朋友,但问题是:两个f1 OR f2中都可能有一个人。

这是profile.php文件的一部分,该文件以$_GET'ing ?u作为用户名,向服务器查询用户名并获取关联数组。

我在OR上查找了查询语法,并编写了一个查询(失败):

代码语言:javascript
复制
<?
session_start(); /* If you want to take a look at *some* of the earlier code */
$connect1 = mysql_connect("localhost", "xxxxx", "xxxxxx") or die(mysql_error());
mysql_select_db("txclanco_xxxxx") or die(mysql_error());
if(isset($_GET['u']))
    {
        $username = mysql_real_escape_string($_GET['u']);
        $data = mysql_query("SELECT * FROM users WHERE username='$username'");
        if(mysql_num_rows($data)===1)
            {
                $result = mysql_fetch_assoc($data);
                $firstname = $result['firstname']; }
$user = $_SESSION['username'];

在这里/*更多不相关的代码*/

/*好友检查位从这里开始*/

代码语言:javascript
复制
$friendcheck =  mysql_query("SELECT * FROM friends WHERE (f1='$username' AND f2='$user') OR (f1='$user' AND 'f2='$username')");
if(mysql_num_rows($friendcheck)===1)
{
$fa = mysql_fetch_assoc($data);
$fstatus = $fa['status'];
$addstring = "";
}
else { $addstring = "<a href='#' id='".$username."' class='addfriend'>add as friend</a>"; }
?>

然后在页面的后面,我们显示朋友状态:

代码语言:javascript
复制
<? 
if($user==$username) { 
echo "nice profile you got here :)";
$fstatus = "asd";
}
if($fstatus==0) { 
echo "friend request sent"; 
}
echo $addstring;
?>

此代码返回以下内容:

代码语言:javascript
复制
<b>Warning</b>:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>/home/txclanco/public_html/hotmuze/beta/profile.php</b> on line <b>56</b><br />

我认为这意味着$friendcheck查询是错误的。

有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-07-18 07:29:55

在您的查询中,在第二部分中的f2之前有一个额外的单引号。

代码语言:javascript
复制
f1='$username' AND f2='$user') OR (f1='$user' AND 'f2='$username')

应该是

代码语言:javascript
复制
f1='$username' AND f2='$user') OR (f1='$user' AND f2='$username')
票数 1
EN

Stack Overflow用户

发布于 2011-07-18 07:48:23

我真的认为你应该使用PDO,这也可以帮助你避免sql注入:

代码语言:javascript
复制
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM friends WHERE (f1 = :username AND f2 = :user) OR (f2 = :user AND f1 = :username)");
$stmt->bindParam(':username',$username);
$stmt->bindParam(':user',$user);
$stmt->execute();
$result = $stmt->fetchAll();
if (count($result) > 0) {
  // Do something
}
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6727455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档