多个mysql表与php连接?
老实说,我不知道如何做我想做的事。我对php和Mysql都没有太多的经验,但我正在尝试并且可能需要一些帮助,最好是使用工作示例代码 问题:我有三张桌子多个mysql表与php连接?,php,mysql,Php,Mysql,老实说,我不知道如何做我想做的事。我对php和Mysql都没有太多的经验,但我正在尝试并且可能需要一些帮助,最好是使用工作示例代码 问题:我有三张桌子 成员 自定义字段 海关 成员包括: membername | Id rank | name 自定义字段包含: membername | Id rank | name 自定义包含 fieldid | userid | fieldvalue 表列匹配于 customvals.userid=members.id customvals.fiel
membername | Id
rank | name
自定义字段包含:
membername | Id
rank | name
自定义包含
fieldid | userid | fieldvalue
表列匹配于
customvals.userid=members.id
customvals.fieldid=members.rank
我需要做的是匹配数据,这样当调用page.php?user=membername时,它就会显示在页面上
Table1.membername:<br>
Table2.name[0] - Table3.fieldvalue[0]<br>
Table2.name[1] - Table3.fieldvalue[1]<br>
etc...
显然,这不起作用,因为我遇到以下错误:
警告:mysql_query()希望参数2是资源,字符串在第534行给出
警告:mysql_fetch_array()希望参数1是resource,第535行中给出的空值。此SQL查询应执行以下操作:
SELECT a.membername, a.Id, b.fieldid, b.userid, b.fieldvalue, c.rank, c.name
FROM members AS a
LEFT JOIN customvals AS b ON a.id = b.userid
LEFT JOIN customfields AS c ON b.rank = c.fieldid
WHERE a.Id = #MEMBERIDHERE#;
虽然这是一个非常广泛的问题,而且您还没有提供任何PHP代码,但您可能希望将其分解为多个部分: 建立与数据库的连接(使用mysqli)并发送查询: 将您的桌子绑在一起: 进入
MySQL
语法时,最好从清晰的结构(包括换行符)开始。一种方法是使用某种查询框架:
SELECT tablealias.column, table2alias.field3
FROM table AS tablealias
LEFT|RIGHT|INNER JOIN table2 AS table2alias ON table.id=table2.id
WHERE (this and that = true or false, LIKE and so on...)
将其分解为您的具体问题,这将是:
SELECT Table1.`membername`, Table2.`name`, Table3.`fieldvalue`
FROM members AS Table1
LEFT JOIN customvals AS Table3 ON Table1.`id` = Table3.`userid`
LEFT JOIN customfields AS Table2 ON Table3.`fieldid` = Table2.`rank`
WHERE Table1.`Id` = 'UserID to be searched for'
改进和安全措施:
但是,这其中有更多的东西是看不见的。如果您刚刚开始,那么不妨直接进入准备好的mysqli
-语句。给定获取成员的查询,唯一更改的部分是ID。这可用于准备好的语句,它比我们的第一个查询安全得多(尽管没有第一个查询那么快)。考虑下面的代码:
$sql = "SELECT Table1.`membername`, Table2.`name`, Table3.`fieldvalue`
FROM members AS Table1
LEFT JOIN customvals AS Table3 ON Table1.`id` = Table3.`userid`
LEFT JOIN customfields AS Table2 ON Table3.`fieldid` = Table2.`rank`
WHERE (Table1.`Id` = ?)";
$c = mysqli_connect("localhost","user","password","db");
$stmt = $c->stmt_init();
if ($stmt->prepare($sql)) {
$stmt->bind_params("i", $userid);
$stmt->execute();
while ($stmt->fetch()) {
//do stuff with the data
}
$stmt->close();
}
$mysqli->close();
到目前为止你试过的代码在哪里?您有一个php标记,但php上没有。你用的是什么连接库?我明白大家说的,我不知道是什么循环。如何编写显示此信息的循环Table2.name[?]-Table3.fieldvalue[?]$profileinfocall=“选择表1。
membername
,表2。name
,表3。fieldvalue
从作为表1的成员中左键加入customvals作为表1上的表3。id
=表3。userid
左键加入customfields作为表3上的表2。fieldid
=表2。rank
其中表1。id
=$userid;“;$profileloop=mysql\u query($profileinfocall);$loop=mysql\u fetch\u row($profileloop);echo$loop[Table.rank];显然这是错误的-但这正是让我困惑的部分。我稍微理解了一下,但我明白了,谢谢你的代码:)