MySQL查询返回了错误的值。

3
我正在尝试使用数据库表中的数据制作菜单。但是我遇到了一个小问题。我的查询结果返回了一个错误的布尔值。
这是我的代码:
<?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个项目:idCategoryname,“subcategories”表包含3个项目:idSubcategoryidCategoryname
请问有人可以告诉我我在这里做错了什么吗?

1
为什么对于这些简单的查询你要使用存储过程? - arkascha
你的 intval 是否将 ID 改成了一个不存在的 ID?或者该 ID 以 0 开头,因此无法找到它? - eric.itzhak
你可以通过将 $id = intval($row['idCategory']); 更改为 $id=1; 进行调试,看看它是否有效。 - fedorqui
我收到了相同的结果。 - Nistor Alexandru
请注意,mysqli类具有一个error属性 - Álvaro González
显示剩余5条评论
1个回答

1

将变量名更改为@id_Category,你在名称前缺少了@。

在MySQL中,@variable表示用户定义的变量。您可以定义自己的变量。

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

一个没有@的变量是系统变量,您无法自行定义。 这对您造成了问题,因为您在声明变量时没有使用@

希望这有所帮助

参考

用户定义的变量

系统变量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接