PHP-MySql连接-
我试图从MySql数据库中获取一些细节,但我工作了这么长时间,尝试了这么多方法,现在我完全迷失了方向:s 我需要得到的是两个细节,这取决于3个表中的信息。我需要获得$title和$siteurl(来自表_站点),其中当前用户以前没有单击它,并且siteurl所有者仍然有剩余的信用 这是我的数据库: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
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的方法:-)我稍后会在那里获取更多的细节。谢谢你,马克。事实上,我稍后会在那里再了解一些细节。谢谢你,马克。