Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个mysql表与php连接?_Php_Mysql - Fatal编程技术网

多个mysql表与php连接?

多个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

老实说,我不知道如何做我想做的事。我对php和Mysql都没有太多的经验,但我正在尝试并且可能需要一些帮助,最好是使用工作示例代码

问题:我有三张桌子

  • 成员
  • 自定义字段
  • 海关
  • 成员包括:

    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];显然这是错误的-但这正是让我困惑的部分。我稍微理解了一下,但我明白了,谢谢你的代码:)