我希望有一些关于想要销售的项目的类,有很多项目,如设计,产品,默认产品等,所有产品都想在一个数据库中保存,所以我可以很容易地连接到表格图像,一对多。
所以我创建了一个类,它将保存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
表designID
或undesignID
+ 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"]
在函数中未定义?
有没有其他替代方案?
答案 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);