<?php
$query120 = "(SELECT username FROM friendship WHERE frenusername='{$username2}') UNION (SELECT frenusername FROM friendship WHERE username='{$username2}')";
$result120 = mysql_query($query120,$connection) or die (mysql_error());
confirm_query($result120);
while($userinfo120 = mysql_fetch_array($result120)){
$frenusername2= $userinfo120['username'];
echo $frenusername2;
}
?>
输出显示两个选择查询的结果。为什么$frenusername2
的值为$userinfo120['username'];
和$userinfo120['frenusername'];
?
答案 0 :(得分:0)
好的......我会咬人,但你需要比这个网站给你更多的帮助。也许是关于sql,mysql和php的一本书还是三本......
对于你的问题:sql UNION
没有做你认为它正在做的事情。当您向数据库发送SELECT
sql查询时,它会返回包含您请求的数据的0行或更多行。每行将包含在语句的SELECT
子句中指定的列数(SELECT
和FROM
之间)。
在您的查询中,您只有一列username
。当您使用UNION
时,您(可能)使用第二个查询添加更多行,但列名称不会更改,因此,假设friendship
中的数据如下所示:
username | frenusername
---------|-------------
usera | userb
usera | userc
userb | userc
userc | usera
和$username2 = 'userb'
,然后你会得到两行,如下所示:
username
--------
usera
userc
第一行是
的结果SELECT username FROM friendship WHERE frenusername='{$username2}'
,第二行是
的结果SELECT frenusername FROM friendship WHERE username='{$username2}'
如果$username2 = 'usera'
,您可能会期望得到如下结果:
username
--------
userc
userb
userc
但是UNION
实际上从结果集中删除了重复项,提供了
username
--------
userc
userb
查看Mysql documentation了解更多内容。但简而言之,UNION
并不一定是您想要获得两个单独的数据集(一组有$username2
作为朋友的人和一组人$username2
的方式。 1}}作为朋友)。
作为奖励,除非你在其他php页面中包含php页面(使用include()
等),否则你不必担心因为正在访问页面而使用相同的变量名称通过相同的AJAX脚本。
是的,如果您直接使用POST或GET HTTP请求中的数据,您应该担心SQL注入。 (即,如果从$username2
或$_POST
中的值中分配了$_GET
,并且您未在问题中提供的代码之前对其进行测试,那么