Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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
Php 使用右连接将页面数据与页面匹配_Php_Mysql - Fatal编程技术网

Php 使用右连接将页面数据与页面匹配

Php 使用右连接将页面数据与页面匹配,php,mysql,Php,Mysql,在我的代码中,我试图连接页面名称和页面数据名称,以便能够用数据库中的数据填充网页。这两张表如下图所示 页面数据 页面 因此,当我在PHP函数中运行以下代码时,我没有想到echo会输出1 function merge_page($dbc) { $q = "SELECT pages.page_name, page_data.section_name FROM page_data RIGHT JOIN 'page_data' ON

在我的代码中,我试图连接页面名称和页面数据名称,以便能够用数据库中的数据填充网页。这两张表如下图所示

页面数据

页面

因此,当我在PHP函数中运行以下代码时,我没有想到echo会输出
1

function merge_page($dbc) {
    $q = "SELECT pages.page_name, page_data.section_name 
         FROM page_data 
         RIGHT JOIN 'page_data' 
         ON pages.id = page_data.section_page_id";

    $r = mysqli_query($dbc, $q);
    echo print_r($r);
    return 0;
}
我期待着类似于

pages.page_name    page_data.section_name 
   Welcome               Section 1
   Welcome               Section 2
   Welcome               Section 3
   Welcome               Section 4
   Welcome               Section 5

如果您能帮我解决这个问题,我将不胜感激。

我认为您应该使用内部联接(在页面数据和页面之间),而不是页面数据和页面数据之间的正确联接

如果行不匹配,则使用左联接

"SELECT pages.page_name, page_data.section_name 
 FROM page_data 
 LEFT  JOIN 'pages' 
     ON pages.id = page_data.section_page_id";
试试这个吧?
echo打印($r->mysqli\u fetch\u数组)

失败时返回FALSE。要成功选择、显示、描述或 解释查询mysqli_query()将返回一个mysqli_结果对象。对于 其他成功的查询mysqli_query()将返回TRUE。


编辑:哦,我看到问题了。没有“pages”表,
正在将对
页面数据的第二次引用变成一个字符串(您显然无法加入该字符串)。

在mysqli结果上直接使用print\r是错误的

function merge_page($dbc) {
$q = "SELECT pages.page_name, page_data.section_name 
     FROM page_data 
     RIGHT JOIN 'page_data' 
     ON pages.id = page_data.section_page_id";

$r = mysqli_query($dbc, $q);
$result = array();
if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        $result[] = $row;
    }
}
return $result;
}

不幸的是,这会导致错误,因为
$r
非对象
。这就是为什么我认为问题在于查询,而不是结果。不过,谢谢你的支持answer@Dan请参见编辑。根据我的经验,大多数开发人员远离
RIGHT
join,并按照
LEFT
join的方式进行重写。在复杂的查询中,右连接会使读取查询变得很麻烦(特别是当与其他连接混合时)。此外,如果有疑问,请在某种查询浏览器(PHPMyAdmin、MySQL Workbench、SqlYog等)中运行查询,看看它会向您抛出什么错误。好的。感谢您的编辑,但我不明白您所说的
页面
表不存在是什么意思。你会建议我如何解决我的问题?此外,我正在浏览器中运行查询,它不会返回任何错误。这就是为什么我感到困惑,因为我无法得到想要的results@Dan您显示的查询没有
页面
作为表。它有
…从页面数据右键连接“页面数据”…
function merge_page($dbc) {
$q = "SELECT pages.page_name, page_data.section_name 
     FROM page_data 
     RIGHT JOIN 'page_data' 
     ON pages.id = page_data.section_page_id";

$r = mysqli_query($dbc, $q);
$result = array();
if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        $result[] = $row;
    }
}
return $result;
}