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

标签 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 + defaultProductIDdesignID + 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

所以我在 Debug模式下检查了locals,这里是截图链接: http://postimg.org/image/ssfqv5f6h/

在 visual studio Debug模式下,定义了 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/

相关文章:

php - 如何通过带有 session 值的存储过程将数据插入表?

php - Yii accessRules 表达式不起作用

MySQL 查询不返回所需的结果。没有任何订单的客户,不显示

Windows 上的 MySQLDump 性能随时间下降

MySQL 问题 1025

mysql - Pandas Dataframe - Mysql 从表中选择 <A 列来自 Dataframe> 中的条件

php - Zend框架;让 Controller 使用不同的查看器

php - openssl_verify() : supplied key param cannot be coerced into a public key for a . pem 文件

php - joomla 中 & 的含义

html - 将 CSS 存储在 mysql 数据库中