我有一个返回$values
变量的类(在Request()
类中定义),我在php文件中调用了这两个:
$requestImport = new Request();
$requestImport->request();
$import = new Import($dbh, $values);
$import->import();
它给了我这个错误:Undefined variable: values
。这是我得到$values
变量的地方(忽略了上面和下面的行,因为它有点长):
$importData = json_decode($contentResult);
foreach ($importData as $value) {
$filter = [];
$filter['CategoryName'] = $value->CategoryName;
$filter['CategoryId'] = $value->CategoryId;
$values[] = $filter;
}
return json_encode($values);
如果有帮助,这是Import
类中的构造函数:
public function __construct($dbh, $values) {
$this->dbh = $dbh;
}
我在foreach循环中使用$values
,如下所示:
public function import() {
foreach ($values as $insertData) {
$this->values['categoryName'] = $categoryName;
$this->values['categoryId'] = $categoryId;
$stmt = $this->dbh->prepare("INSERT INTO t_virtuemart_categories_en_gb (
category_name, id)
VALUES
(:categoryName, :categoryId)
;");
$stmt->bindParam(":categoryName", $categoryName);
$stmt->bindParam(":categoryId", $categoryId);
$stmt->execute();
}
}
我不知道这是否是最好的方法($values
是一个json字符串,用于将内容插入到数据库中)任何改进它的建议也会有所帮助。如果您需要任何其他信息,我会添加它。
答案 0 :(得分:1)
您没有从正在调用该类的文件中定义$values
。
在你的循环中,$values
正在内部定义。这意味着它超出了代码中的任何其他位置。
$importData = json_decode($contentResult);
foreach ($importData as $value) {
$filter = [];
$filter['CategoryName'] = $value->CategoryName;
$filter['CategoryId'] = $value->CategoryId;
$values[] = $filter;
}
return json_encode($values);
您需要通过在循环外定义$values
来解决此问题。
$values = array();
$importData = json_decode($contentResult);
foreach ($importData as $value) {
$filter = [];
$filter['CategoryName'] = $value->CategoryName;
$filter['CategoryId'] = $value->CategoryId;
$values[] = $filter;
}
return json_encode($values);
您还需要在构造函数中使用$this
使其成为类级变量。
public function __construct($dbh, $values) {
$this->dbh = $dbh;
$this->values = $values;
}
然后从import()
函数访问它。
public function import() {
foreach ($this->values as $insertData) {
$this->values['categoryName'] = $categoryName;
$this->values['categoryId'] = $categoryId;
$stmt = $this->dbh->prepare("INSERT INTO t_virtuemart_categories_en_gb (
category_name, id)
VALUES
(:categoryName, :categoryId)
;");
$stmt->bindParam(":categoryName", $categoryName);
$stmt->bindParam(":categoryId", $categoryId);
$stmt->execute();
}
}
答案 1 :(得分:1)
除了Lars Petersons回答:
变量$ values必须在调用这两个类的php文件中定义:
$requestImport = new Request();
$values = $requestImport->request();
$import = new Import($dbh, $values);
$import->import();
注意,你的导入函数有很多错误,比如$ categoryName和-id。
的声明public function import() {
foreach($this->values as $insertData){
$categoryName = $insertData['categoryName'];
$categoryId = $insertData['categoryId'];
...
编辑:在我更好地了解操作系统想要实现的目标之后我改变了我的答案