PHP-MySql连接-

PHP-MySql连接-,php,mysql,join,Php,Mysql,Join,我试图从MySql数据库中获取一些细节,但我工作了这么长时间,尝试了这么多方法,现在我完全迷失了方向:s 我需要得到的是两个细节,这取决于3个表中的信息。我需要获得$title和$siteurl(来自表_站点),其中当前用户以前没有单击它,并且siteurl所有者仍然有剩余的信用 这是我的数据库: USER: id username password credits active clicks SITES: id userid title siteurl clicks active wei

我试图从MySql数据库中获取一些细节,但我工作了这么长时间,尝试了这么多方法,现在我完全迷失了方向:s

我需要得到的是两个细节,这取决于3个表中的信息。我需要获得$title和$siteurl(来自表_站点),其中当前用户以前没有单击它,并且siteurl所有者仍然有剩余的信用

这是我的数据库:

USER:
id
username
password
credits
active
clicks

SITES:
id
userid
title
siteurl
clicks 
active 
weight

CLICKS:
id
siteid
byuserid
我尝试了以下MySql查询:

include('db_con.php');
mysql_connect("$dbhost", "$dbusername", "$dbpassword")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$qrym = mysql_query("SELECT * FROM `users` WHERE username='$username' LIMIT 1") or die (mysql_error()); 
  while($mem = mysql_fetch_object($qrym)){
    $uid = $row->id;
  }

$qrys = mysql_query("SELECT * FROM sites, clicks WHERE clicks.byuserid != '$uid' and sites.userid != '$uid' and sites.active = '1' ORDER BY sites.weight DESC, sites.id DESC LIMIT 1") or die (mysql_error()); 
if(mysql_num_rows($qrys)!=0){
  while($row = mysql_fetch_object($qrys)){
    $title = $row->title;
    $siteurl = $row->siteurl;
    echo "$title $siteurl";
  }
} else {
echo "No more sites";
}
没有错误,但无论我尝试的结果是没有更多的网站!如何正确加入此查询?

也许可以

while($row = mysql_fetch_object($qrym)){
    $uid = $row->id;
而不是

while($mem = mysql_fetch_object($qrym)){
    $uid = $row->id;
也许吧

while($row = mysql_fetch_object($qrym)){
    $uid = $row->id;
而不是

while($mem = mysql_fetch_object($qrym)){
    $uid = $row->id;

您可能需要这样的查询:

SELECT [the columns you need]
FROM sites
LEFT JOIN clicks ON clicks.siteid = sites.id 
  AND clicks.byuserid = [current user id]
WHERE sites.active = 1 AND clicks.id IS NULL
ORDER BY sites.weight DESC, sites.id DESC 
LIMIT 1
正如上面提到的gpojd,在查询中使用输入之前,必须对输入进行清理。修复第一个查询的代码:

$qrym = mysql_query("SELECT * FROM `users` 
  WHERE username='" . mysql_real_escape_string($username) . "' LIMIT 1");

您可能需要这样的查询:

SELECT [the columns you need]
FROM sites
LEFT JOIN clicks ON clicks.siteid = sites.id 
  AND clicks.byuserid = [current user id]
WHERE sites.active = 1 AND clicks.id IS NULL
ORDER BY sites.weight DESC, sites.id DESC 
LIMIT 1
正如上面提到的gpojd,在查询中使用输入之前,必须对输入进行清理。修复第一个查询的代码:

$qrym = mysql_query("SELECT * FROM `users` 
  WHERE username='" . mysql_real_escape_string($username) . "' LIMIT 1");

当只获取一行数据时,就像第一个查询一样,完全不需要while()循环来检索数据

并观察代码块中的注释:

$qrym = mysql_query("SELECT * FROM `users` WHERE username='$username' LIMIT 1") or die (mysql_error());
while($mem = mysql_fetch_object($qrym)){
       ^^^--- you fetch into $mem
    $uid = $row->id;
            ^^^--- but try to retrieve from $row?
}
请尝试以下方法:

$sql = "SELECT ...";
$qrym = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($qrym);
$uid = $row['uid'];

当只获取一行数据时,就像第一个查询一样,完全不需要while()循环来检索数据

并观察代码块中的注释:

$qrym = mysql_query("SELECT * FROM `users` WHERE username='$username' LIMIT 1") or die (mysql_error());
while($mem = mysql_fetch_object($qrym)){
       ^^^--- you fetch into $mem
    $uid = $row->id;
            ^^^--- but try to retrieve from $row?
}
请尝试以下方法:

$sql = "SELECT ...";
$qrym = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($qrym);
$uid = $row['uid'];

我会先解决您的SQL注入错误。@gpojd它是一个连接,仅仅因为它没有使用关键字
JOIN
并不意味着它不是。我在第二个查询中完全忽略了连接。我不久前编辑了我的回复以删除该部分注释。我将首先解决您的SQL注入错误。@gpojd它是一个连接,仅仅因为它没有使用关键字
JOIN
并不意味着它不是。我在第二个查询中完全忽略了连接。我不久前编辑了我的回复,删除了评论中的这一部分。捕获他可能还没有注意到的bug的方法:-)捕获他可能还没有注意到的bug的方法:-)我稍后会在那里获取更多的细节。谢谢你,马克。事实上,我稍后会在那里再了解一些细节。谢谢你,马克。