2013-02-25 5 views
4

데이터베이스 테이블의 데이터를 사용하여 메뉴를 만들려고합니다. 그러나 나는 약간의 문제가있다. 내 쿼리 결과가 거짓 부울 값을 반환합니다.MySQL 쿼리가 거짓 값을 반환합니다.

<?php 
class DataBase 
{ 
    protected $dbUser; 
    protected $dbPassword; 
    protected $dbHost; 
    protected $dbName; 
    protected $db; 

    function __construct() 
    { 
     $this->dbUser  = 'root'; 
     $this->dbPassword = ''; 
     $this->dbHost  = 'localhost'; 
     $this->dbName  = 'ecommercemakup'; 
     $this->db = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPassword, $this->dbName) or die('Fatal error!'); 
    } 

    public function getInstance() 
    { 
     return $this->db; 
    } 
} 
?> 

<?php 
$db = new DataBase(); 
$r = mysqli_query($db->getInstance(), "CALL categories()"); 
if (mysqli_num_rows($r) > 0) { 
    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 
     echo '<li> <a href=' . $row['name'] . '.php>'; 
     print_r($row['name']); 
     echo '</a> 
      <ul>'; 
     $id = intval($row['idCategory']); 
     $r1 = mysqli_query($db->getInstance(), "CALL subcategories($id)"); 
     if (mysqli_num_rows($r1) > 0) { 
      while ($row1 = mysqli_fetch_array($r1, MYSQLI_ASSOC)) { 
       echo '<li><a href=' . $row1['name'], '.php>'; 
       print_r($row1['name']); 
       echo '</a></li>'; 
      } 
     } 
     echo '</ul></li>'; 
    } 
} 
?> 

첫 번째 쿼리가 제대로 실행되지만 두 번째 쿼리는 항상 false를 반환 :

이 내 코드입니다.

두 방법이있다 :

DELIMITER @@ 
DROP PROCEDURE categories @@ 
CREATE PROCEDURE ecommercemakup.categories() 
BEGIN 
    SELECT * FROM categories; 
END @@ 
DELIMITER ; 

DELIMITER @@ 
DROP PROCEDURE subcategories @@ 
CREATE PROCEDURE ecommercemakup.subcategories 
(IN id_Category INT) 
BEGIN 
    SELECT idSubcategory, idCategory, name FROM subcategories WHERE idCategory = id_Category; 
END @@ 
DELIMITER ; 

categories 표 2 개 항목을 포함 idSubcategory, idCategoryname : idCategorynamesubcategories 표 3 개 항목을 포함한다.

누군가 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?

+0

User defined variable 당신이 MySQL의 명령 줄에서 프로 시저를 실행하려고 했 REFER 희망이 도움이 ? 그냥 둘 중 하나를 확인하는 것은 MySQL이나 PHP 문제입니다. – fedorqui

+0

[DBA SE] (http://dba.stackexchange.com/faq)에 더 적합 – hjpotter92

+0

나는 그것을 시도하고 올바르게 실행됩니다 –

답변

1

변수 이름을 @id_Category으로 바꾸면 이름 앞에 @가 없습니다.

MySQL에서 @variable은 사용자 정의 변수를 나타냅니다. 당신은 당신 자신을 정의 할 수 있습니다.

SET @a = 'test'; SELECT @a;

@가없는 변수는 시스템 변수이며 사용자가 직접 정의 할 수 없습니다. 당신이 @

없이 변수를 선언 한, 당신을 위해 문제를 일으키는이

System variable

관련 문제