Php 使用右连接将页面数据与页面匹配
在我的代码中,我试图连接页面名称和页面数据名称,以便能够用数据库中的数据填充网页。这两张表如下图所示 页面数据 页面 因此,当我在PHP函数中运行以下代码时,我没有想到echo会输出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
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;
}