2012-11-28 4 views
3

'카탈로그'라는 데이터베이스와 '카테고리'라는 테이블이 있습니다. 테이블에는 categoryId, categoryName, parentCategory의 순서로 3 개의 열이 있습니다. parentCategory = 'root'가있는 각 행에 대해 categoryId 및 categoryName을 가져 오려고합니다. 나는 그것이 단순한 쿼리라고 생각했지만 분명히 뭔가를하고있다. 왜냐하면 나는 메시지를 계속 받고 있기 때문에 - 쿼리를 실행할 수는 없지만 - mysql 에러가 표시되지 않는다. 아래 코드를 게시했습니다. 누구든지 나를 똑바로 가리킬 수 있습니까?mysqli 쿼리가 실패하고 오류가 발생하지 않습니다.

P. $ db 변수에 할당 된 값이 있습니다. 나는 여기에 그것들을 포함시키지 않았다.

<?php 
$connect = mysqli_connect($db_host,$db_user,$db_password,$db_database) 
    or die ("Couldn't connect to server: ".mysqli_error()); 

function display_children($parent) { 
    $query = "SELECT categoryId, categoryName FROM `categories` WHERE parentCategory=".$parent; 
    $result = mysqli_query($connect,$query) 
     or die ("Couldn't execute query: ".mysqli_error()); 

    echo "<ul>"; 
    while ($row = mysqli_fetch_assoc($result)) { 
      echo "<li>".$row['categoryName']."</li>"; 
      display_children($row['categoryId']); 
    } 
    echo "</ul>"; 
    mysqli_close($connect); 
} 

?> 

<div class="menu">  
<?php 
    /* Menu Write */ 
    display_children("root"); 
?> 
</div> 
+2

당신이 좋은 일'mysqli'를 사용하는 경우, 사용하십시오 ** SQL 자리를 **. 여기서하고있는 일은 매우 위험합니다. 귀하의 질의에는'WHERE parentCategory =? '가 포함되어야하고 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php)을 호출하여 자리 표시 자 값을 연결해야합니다 . – tadman

+0

@tadman - 자리 표시자를 살펴 보겠습니다. 귀하의 의견에 감사드립니다! – Leann

+0

큰 일이 아니어야합니다. 그런 식으로 일하는 것에서 단 한 줄 밖에 없습니다. 규칙적인 방식으로 사용하면 피해를 입힐 가능성은 거의 없습니다 (http://bobby-tables.com/php). – tadman

답변

6

display_children을() 함수는 $ connect 변수에 액세스 할 수 없습니다.

이 시도 :

function display_children($parent) { 
    global $connect; 
    $query = "SELECT categoryId, categoryName FROM `categories` WHERE parentCategory=".$parent; 
    $result = mysqli_query($connect,$query) 
     or die ("Couldn't execute query: ".mysqli_error()); 

    echo "<ul>"; 
    while ($row = mysqli_fetch_assoc($result)) { 
      echo "<li>".$row['categoryName']."</li>"; 
      display_children($row['categoryId']); 
    } 
    echo "</ul>"; 
    mysqli_close($connect); 
} 
+0

Yipee! 이것은 아름답게 일했다! 질의가 함수 내에서 $ connect를 찾을 수 없다는 것은 나에게는 결코 발생하지 않았다. 고맙습니다!! – Leann

+0

베다니를 환영합니다. :) 왼쪽의 카운터 아래에있는 체크 표시를 클릭하여 자유롭게 답을 선택하십시오. –

0

나는 쿼리에서 $parent의 값을 인용하면됩니다.

$query = "SELECT categoryId, categoryName FROM `categories` 
      WHERE parentCategory = '" . $parent . "'"; 

희망이 있습니다.

+0

위와 같이 제안한 내용은 위의 카야 짐의 답변과 함께 사용할 수 있습니다. 그러나 쿼리가 작동하려면 연결이 필요하지 않음을 발견했습니다. 쿼리의 큰 따옴표 안에있는 변수 주위의 견고한 작은 따옴표. 의견을 주셔서 감사합니다! – Leann

0

mysqli_error()은 매개 변수로 데이터베이스와의 링크가 필요합니다.

그래서 오류에 대한 코드는 다음과 같습니다

or die ("error: " +mysqli_error($connect)); 

이것은 또한 여기에 설명되어 있습니다 : http://php.net/manual/en/mysqli.error.php

Mayby을이 오류보고에 도움이 ...

+1

$ connect 변수를 mysqli_error()에 추가하려고했지만 아무 것도 변경하지 않았습니다. 여전히 오류는보고되지 않았습니다. – Leann

관련 문제