获取数据错误关系表

时间:2015-06-24 13:44:28

标签: php mysql

我正在尝试从我的数据库中检索一些数据,我已经有了一个连接。我有3张桌子:

users column = user_id cats column = cat_id user_cat_join columns-user_is& CAT_ID

user_cat_join表与相应的表相关。

我试图从表中获取数据,仅显示分配给我登录的用户的类别。所以,我从会话功能中获取用户ID,然后尝试绘制我需要的数据。

require('../ db_con.php');

// BUILD AND DISPLAY THE CATEGORY LIST (RICOH BUILD)

function build_cat_list()
{

    global $dbc;

    // DEFINE THE QUERY:
    $user = $_SESSION['user'];
    $q = "SELECT cat_name, cat_icon, cat_color
                                FROM cats
                                INNER JOIN user_cat_join
                                ON cats.cat_id = user_cat_join.cat_id
                                WHERE user_cat_join.user_id = $user"; 
    $r = mysqli_query ($dbc, $q); // Run the query.


    // FETCH AND PRINT ALL THE RECORDS
    while ($row = mysqli_fetch_array($r)) {
    echo '

    <a href="view_cat.php?cat_id='.$row["cat_id"].'">
        <div class="indexBox"">
            <div class="indexBoxHeader"  style="background-color:'.$row["cat_color"].'"><p>'
                .$row["cat_icon"].'</p>
                </div>
            <div class="indexBoxFooter">
                <p>'.$row["cat_name"].'</p>
            </div>
        </div>
    </a>';

    }
}

显示时出现以下错误?

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\MAMP\htdocs\home.php on line 33

以上是参考:

while ($row = mysqli_fetch_array($r)) {

我做了进一步的错误报告,并通过这样做:

if($r === FALSE) { 
     printf(mysqli_error($dbc));
    exit();
}  

我明白了:

  

'where子句'中的未知栏'5ad3e66c5e1e7747707c480dca04fc85'

我不知道那指的是什么?

更新

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    // BUILD AND DISPLAY THE CATEGORY LIST (RICOH BUILD)

    global $dbc;

    // DEFINE THE QUERY:
    $user = $_SESSION['user'];

    $q = sprintf("
        SELECT
            cat_name, cat_icon, cat_color
        FROM
            cats
        INNER JOIN
            user_cat_join
        ON
            cats.cat_id = user_cat_join.cat_id
        WHERE
            user_cat_join.user_id = '%s'
        ",
        mysqli_real_escape_string($dbc, $user)
        );


     $r = mysqli_query ($dbc, $q); // Run the query.

    if($r === FALSE) { 
        printf(mysqli_error($dbc));

    }  


    // FETCH AND PRINT ALL THE RECORDS
    while ($row = mysqli_fetch_array($r)) {

       var_dump($row);

    echo '
    <a href="view_cat.php?cat_id='.$row["cat_id"].'">
        <div class="indexBox"">
            <div class="indexBoxHeader"  style="background-color:'.$row["cat_color"].'"><p>'
                .$row["cat_icon"].'</p>
                </div>
            <div class="indexBoxFooter">
                <p>'.$row["cat_name"].'</p>
            </div>
        </div>
    </a>';

    }
?>

2 个答案:

答案 0 :(得分:0)

您必须引用您的用户变量:

$q = "SELECT cat_name, cat_icon, cat_color
                            FROM cats
                            INNER JOIN user_cat_join
                            ON cats.cat_id = user_cat_join.cat_id
                            WHERE user_cat_join.user_id = '$user'"; 

答案 1 :(得分:0)

你的WHERE不应该如下,否则你当前的WHERE条款看起来像WHERE user_cat_join.user_id = 5ad3e66c5e1e7747707c480dca04fc85;您的数据库引擎思维是一个单独的列,因此抱怨相同。

WHERE user_cat_join.user_id ='". $user. "'"

简而言之,它看起来应该是

$q = "SELECT cat_name, cat_icon, cat_color
                            FROM cats
                            INNER JOIN user_cat_join
                            ON cats.cat_id = user_cat_join.cat_id
                            WHERE user_cat_join.user_id ='". $user. "'";