变量在脚本中定义,但不作为函数中的参数。怎么了?

时间:2015-02-12 10:15:27

标签: php mysql

我希望有一些关于想要销售的项目的类,有很多项目,如设计,产品,默认产品等,所有产品都想在一个数据库中保存,所以我可以很容易地连接到表格图像,一对多。

所以我创建了一个类,它将保存item表中的所有数据... 这个班级必须知道它是什么类型的产品。 但问题是当某个列在函数中未定义时,它是在脚本中定义的。

这是MySQL表...

create table item (
    itemID int not null auto_increment,
    itemDiscount int default 0,
    orderCount int default 0,
    itemName text,
    designID int,
    embedID int,
    productID int,
    defaultProductID int,
    undesignID int,
    .
    .
    -- constraint declaration
);
  • itemDiscount用于产品折扣
  • designID用于描述设计(约束为design表)
  • productID适用于用户的产品,已经设计好了(约束product表)
  • undesignID是用户的产品,但尚未设计(约束undesign表)
  • defaultProductID适用于网络提供的产品。 (约束defaultPorduct表)
  • embedID用于嵌入designID + 已在defaultProductID
  • 中组织的designIDundesignID + embed

我插入了一些数据,这里是数据(仅用于调试目的)

itemID ... designID    productID    defaultProductID   undesignID   embedID
   1           1
   2                                       1
   3                        1
   4                                                                   1
class item{
    public $type;
    .
    .
    /**
     * Determine what kind of product in certain row.
     * @param array $row 
     * @return string
     */
    static function itemType($row){
        if(!is_null($row["productID"])){
            return "product";
        }else if(!is_null($row["defaultProductID"])){
            return "default";
        }else if(!is_null($row["designID"])){
            return "design";
        }else if(!is_null($row["embedID"])){
            $query  = "select * from embed where embedID={$row["embedID"]}";
            $result = execute($query);
            $row = mysqli_fetch_assoc($result);
            return "embed_" . self::itemType($row);
        }

    }
    function __construct(){
        //do stuff
    }
}

所以我尝试了我的静态功能:

$query = "select * from item";
$result = execute($query);
while($row = mysqli_fetch_assoc($result)){
     echo item::itemType($row) . "<br/>";
    //debug($row);
    echo $row["defaultProductID"] . "<br/>";
}

这是我得到的:

design

default
1
product

Notice: Undefined index: defaultProductID in C:\Users\jodi\Documents\Visual Studio 2013\Projects\Prodegitv2\Prodegitv2\includes\item.php on line 17 

embed_design

为什么我会收到这样的通知?
打印1,因此必须定义索引defaultProductID

所以我在调试模式下检查了本地人,这里是截图的链接: http://postimg.org/image/ssfqv5f6h/

在visual studio调试模式中,defaultProductID已定义...
为什么$row["defaultProductID"]在函数中未定义?

有没有其他替代方案?

2 个答案:

答案 0 :(得分:2)

您的问题在于此代码

    }else if(!is_null($row["embedID"])){
        $query  = "select * from embed where embedID={$row["embedID"]}";
        $result = execute($query);
        $row = mysqli_fetch_assoc($result);         <-----
        return "embed_" . self::itemType($row);     <-----
    }

您将查询的查询结果分配给嵌入表,以覆盖之前的$row变量(项目表的数据)。然后使用新的$row数据(来自嵌入表)再次调用itemType函数。我想嵌入表中没有defaultProductId字段。这就是您的代码失败的原因。

答案 1 :(得分:1)

尝试更改这些行:

$row = mysqli_fetch_assoc($result);
return "embed_" . self::itemType($row);

到:

$res = mysqli_fetch_assoc($result);
return "embed_" . self::itemType($res);