2013-12-13 2 views
0

나는이 코드를 완전히 고수하고 누군가가 도울 수 있기를 바란다. "테이블"이라는 테이블 하나가있는 데이터베이스가 있으며 id, file_name link_name, category, main_cat 등 5 개의 열이 있습니다. 중요하지만 main_cat 유형이 tinytext이고 file_name이 varchar 인 지 확실하지 않습니다. 내 탐색 메뉴 (아래 코드)에같은 테이블에서 2 열을 가져 오는 쿼리

id | file_name | link_name | category | main_cat 
1 | books  | Books  | books | 1 
2 | fiction  | Fiction  | books | 2 
3 | non-fiction | Non-Fiction | books | 2 
4 | music  | Music  | music | 1 
5 | alternative | Alternative | music | 2 
6 | country  | Country  | music | 2 

, 나는 (1) 상장 후 하위 페이지가 man_cat (2) 아래에 표시 할 main_cat을 모두 가지고 싶습니다. 여기에 코드가 있습니다. 지금 당장, 내부 조인과 왼쪽 조인을 포함하여 여러 가지 방법을 시도했지만 문제는 아닙니다. "경고 : mysqli_fetch_assoc()은 매개 변수 1이 mysqli_result가 될 것으로 예상하고, 부울 에 주어진 ... "

<ul> 
<?php 
    $query = "SELECT * FROM pages WHERE main_cat = 1 ORDER BY link_name ASC "; 
    $main_pages = mysqli_query($conn, $query); 
    confirm_query($main_pages); 
?> 
<?php 
    while($mainpage = mysqli_fetch_assoc($main_pages)) { 
?> 
    <li><a href="/edit.php?<?php echo $mainpage["id"]; ?>"><?php echo $mainpage["link_name"]; ?></a> 

    <?php 
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 
$sub_pages = mysqli_query($conn, $query); 
confirm_query($sub_pages); 
    ?> 
    <ul> 
    <?php 
while($subpage = mysqli_fetch_assoc($sub_pages)) { 
    ?> 
<li><a href="/edit.php?<?php echo $subpage["id"]; ?>"><?php echo $subpage["link_name"]; ?></a></li>  
<?php 
} 
?> 
    <?php mysqli_free_result($sub_pages); ?> 
    </ul> 
</li> 
<?php 
} 
?> 
<?php mysqli_free_result($main_pages); ?> 
</ul>  
+0

mysqli_fetch_assoc을 여러 번 호출한다. 처음에는 작동하지 않는 mysqli_fetch_assoc가 여러 번 호출된다. –

+0

네, 두 번 호출하지 않아도됩니다. 두 가지 쿼리가 있습니다. 기본 페이지에 대한 쿼리와 하위 페이지에 대한 쿼리가 있습니다. 하위 페이지 (두 번째 페이지)는 작동하지 않는 페이지입니다. 감사! – user2998254

+0

$ conn은 어디에 정의되어 있습니까? – user2936213

답변

5

이것은 당신에게 가슴 앓이를 줄 것입니다 :

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 

문제는 file_name 주위 " 문자가 문자열을 끝으로 해석되고 있는지, 그리고 PHP는 불안정합니다됩니다.

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 
     //^start string             ^end  ^s ^end again 

대신에 이러한 옵션 중 하나를 시도해보십시오 : 다른 말로하면, PHP이 보는 변수 주위에 따옴표를주의, 또한

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '{$mainpage['file_name']}'"; 
$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = '".$mainpage["file_name"]."'"; 

을 - file_name 실제로 숫자하지 않는 한, 당신은 필요 데이터를 따옴표로 묶으십시오.

마지막으로, 이것은 아마도 알 수 없지만 실제로는 여기에 준비된 문장을 사용해야합니다.

+0

감사합니다! 이것은 나의 문제점을 해결했다 ... 나는 그것을하고있는 따옴표 이었다는 느낌이 들었다. 나는 그들을 벗어나려고했으나 틀리게 먹었을 것이다. 나는 그 일을 너무 정확하게 할 수 있었고, 따옴표를 벗어났다. 그리고 그렇습니다, 나는 동의합니다. 준비된 진술이 필요합니다. – user2998254

+0

도움이 되니 기쁩니다! 'file_name' 주위의 따옴표를 이스케이프 (escape)한다는 것을 의미한다면, 그것은 구문 오류를 일으킬 것입니다. 예 :'$ x = array ('foo'=> 'bar'); echo "test {$ x [\"foo \ "]}";'throws "** 구문 분석 오류 : ** 구문 오류, 예기치 않은 T_CONSTANT_ENCAPSED_STRING, 2 행의 T_STRING이 필요함" –

+0

왜 내가이 그것을 function.php 페이지로 옮겼습니까? 'function cms_find_sub_pages() { \t \t global $ conn; \t \t \t \t $ query = "SELECT * FROM pages where main_cat = 2 AND category = '{$ mainpage ["file_name "]}' '"; \t \t $ sub_pages = mysqli_query ($ conn, $ query); \t \t confirm_query ($ sub_pages); \t \t return $ sub_pages; \t \t ' – user2998254

0

나는 당신의 두 번째 쿼리와 함께 할 수있는 뭔가 생각, 당신이 잘못 포맷 할 수 있습니다 ... 내가 전문가는하지만 그것이 잘못이 있다면 아마 다른 사람이 편집 할 수 있습니다 해요 . 당신이 바로 데이터베이스에 연결하고 쿼리가있는 경우

$main_pages = mysqli_query($conn, $query); 부울을 반환 구문이 올바른지

$mainfilename = $mainpage['file_name']; 

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = $mainfilename"; 
+0

고마워, 시도, 구문 오류를 던졌습니다 – user2998254

+0

작성해야하는 방법을 잘 모르지만 위에서 편집 한 작업을 시도해보십시오 ...? – atomapps

+0

첫 번째 옵션은 작업 할 데이터 주위에 따옴표가 필요하며' "는 전체 문자열을 묶기 때문에'''를 사용하면 문제가 발생합니다. 두 번째 옵션은 데이터 주위에 따옴표가 없습니다. –

1

확인이 $conn은 다음과 같습니다 여기에

$query = "SELECT * FROM pages WHERE main_cat = 2 AND category = {$mainpage["file_name"]}"; 

이에서

올바르게 설정되지 않았거나 쿼리 구문이 잘못되었습니다. "() 예상 매개 변수 (1) mysqli_result되는, 부울에 주어진 mysqli_fetch_assoc ... 경고"$main_pages는 부울 값이 로

따라서 당신이 mysqli_fetch_assoc($main_pages)을 발사 할 때 그것은 가 발생합니다.

+0

감사. 연결이 올바르지 않은 경우 전혀 결과를 얻지 못할 것입니다.하지만 $ main_pages에 대한 결과를 얻습니다. 내가 얻지 못하는 것은 $ sub_pages에 대한 결과입니다. category = file_name ... – user2998254

+0

연결이 괜찮 으면 phpmyadmin에서 쿼리 및 화재를 인쇄하려고하면 문제가 추적됩니다. – nextgtech

+0

두 번째 쿼리를 "SELECT * FROM where main_cat = 2 AND category like ''(으)로 변경하십시오. $ mainpage [ "file_name"]. " '"; – nextgtech

관련 문제