我想拥有一些类,其中包含所有要出售的商品,有很多商品,例如设计,产品,默认商品等,并且所有商品都希望保存在一个数据库中,因此我可以轻松拥有与表格图像的连接,一对多。
所以我创建了一个类,该类将保存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/>";
}
这是我得到的:
设计
默认
1个
产品
注意:未定义的索引:C:\ Users \ jodi \ Documents \ Visual Studio 2013 \ Projects \ Prodegitv2 \ Prodegitv2 \ includes \ item.php中的defaultProductID
embed_design
为什么我会收到这种通知?
1
已打印,因此必须定义索引defaultProductID
。所以我在调试模式下检查了本地人,这是截图的链接:
http://postimg.org/image/ssfqv5f6h/
在Visual Studio调试模式下,定义了
defaultProductID
。为什么
$row["defaultProductID"]
在函数中未定义?有没有其他解决方案?
最佳答案
您的问题是与此代码
}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字段。这就是您的代码失败的原因。关于php - 变量在脚本中定义,但不作为函数中的参数。怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28474765/