4

データベーステーブルのデータを使用してメニューを作成しようとしています。しかし、私には少し問題があります。クエリ結果は偽のブール値を返します。

これは私のコードです:

<?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>';
    }
}
?>

最初のクエリは正しく実行されますが、2番目のクエリは常にfalseを返します。

2つの手順は次のとおりです。

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つのアイテム:idCategoryとが含まれnamesubcategoriesテーブルには3つのアイテム:idSubcategoryとが含まidCategoryれますname

誰かが私がここで間違っていることを教えてもらえますか?

4

1 に答える 1

1

変数名を に置き換えます@id_Category。名前の前に @ がありません。

MySQL では、@variable はユーザー定義変数を示します。独自に定義できます。

SET @a = 'テスト'; を選択;

@ のない変数はシステム変数であり、自分で定義することはできません。なしで変数を宣言しているため、これは問題を引き起こしています@

それが役に立てば幸い

参照

ユーザー定義変数

システム変数

于 2013-02-25T11:25:10.340 に答える