PHP/MySQL 外键保存为 id=0 到数据库
PHP/MySQL foreign keys saves as id=0 to database
我是 php 和 mysql 的新手,但是我有一个项目需要在我的 类 上使用 Silex 2.0 和 Symfony 完成,我的 php 我的产品中的代码和外键 table 在数据库中。
问题出在我的程序中保存函数的正确方法。
这是我尝试添加或编辑新产品时数据库中发生的情况 - 我得到 idCategory 和 idProducent = 0。:/
我在 ProductModel.php 中有一部分代码负责将其保存到数据库(到 table 产品):
public function addProduct($data)
{
$sql = 'INSERT INTO
`products` ( `id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc` )
VALUES
(NULL,?,?,?,?,?,?)';
$data['price_netto'] = $data['price_brutto'] * 1.22;
$this->_db->executeQuery(
$sql, array(
$data['idCategory'], $data['idProducent'], $data['name'],
$data['price_netto'], $data['price_brutto'], $data['desc'])
);
}
public function saveProduct($data)
{
if (isset($data['id']) && ctype_digit((string)$data['id'])) {
$sql = "UPDATE
products
SET
idCategory = ?, idProducent = ?, name = ?,
price_netto = ?, price_brutto = ?, `desc` = ?
WHERE
id = ?";
$data['price_netto'] = $data['price_brutto'] * 1.22;
$this->_db->executeQuery(
$sql, array(
$data['idCategory'], $data['idProducent'], $data['name'],
$data['price_netto'], $data['price_brutto'], $data['desc'], $data['id'])
);
} else {
$sql = "INSERT INTO
`products` ( `id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc` )
VALUES
(NULL,?,?,?,?,?,?)";
$data['price_netto'] = $data['price_brutto'] * 1.22;
$this->_db->executeQuery(
$sql, array($data['id']), array(
$data['idCategory'], $data['idProducent'], $data['name'],
$data['price_netto'], $data['price_brutto'], $data['desc'])
);
}
}
这里有ProductController.php[我认为这里很重要的部分]:
https://codeshare.io/5w4rRD
也适用于 ProducentsModel.php 和 CategoriesModel.php:
public function getProducents()
{
$sql = 'SELECT * FROM producents;';
return $this->_db->fetchAll($sql);
}
public function getCategories()
{
$sql = 'SELECT * FROM categories;';
return $this->_db->fetchAll($sql);
}
很抱歉只给你链接,但这是我第一次使用 Stack Overflow,希望你能理解。
请勿逐字复制此内容,但您的 SQL 遗漏了以下内容:
CREATE TABLE `products` (
id INT UNISIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
... missing part below
CONSTRAINT `FKID_CATEGORY_ID` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE IF NOT EXISTS `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idCategory` int(10) unsigned DEFAULT NULL,
`idProducent` int(10) unsigned DEFAULT NULL,
`name` char(32) COLLATE utf8_bin NOT NULL,
`price_netto` float NOT NULL,
`price_brutto` float unsigned NOT NULL,
`desc` text COLLATE utf8_bin,
PRIMARY KEY (`id`),
KEY `FK_products_1` (`idCategory`),
KEY `FK_products_2` (`idProducent`),
CONSTRAINT `FK_products_1` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`),
CONSTRAINT `FK_products_2` FOREIGN KEY (`idProducent`) REFERENCES `producents` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
数据库很好。该错误在 ProductController.php 中,您可以在上面的 link 中找到它。这是它在编辑和添加选项中的样子:
for ( $i=0; $test[$i] != NULL; $i++) {
$choiceCategory[$test[$i]['name']] = $test[$i]['id'];;
}
$producentModel = new ProducentsModel($app);
$test = $producentModel->getProducents();
$choiceProducent = array();
for ( $i=0; $test[$i] != NULL; $i++) {
$choiceProducent[$test[$i]['name']] = $test[$i]['id'];
}
并删除此:choice_label
直到 placeholder=>'Choose'
。
抱歉打扰了大家,谢谢你们的快速回答。
我是 php 和 mysql 的新手,但是我有一个项目需要在我的 类 上使用 Silex 2.0 和 Symfony 完成,我的 php 我的产品中的代码和外键 table 在数据库中。
问题出在我的程序中保存函数的正确方法。
这是我尝试添加或编辑新产品时数据库中发生的情况 - 我得到 idCategory 和 idProducent = 0。:/
我在 ProductModel.php 中有一部分代码负责将其保存到数据库(到 table 产品):
public function addProduct($data) { $sql = 'INSERT INTO `products` ( `id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc` ) VALUES (NULL,?,?,?,?,?,?)'; $data['price_netto'] = $data['price_brutto'] * 1.22; $this->_db->executeQuery( $sql, array( $data['idCategory'], $data['idProducent'], $data['name'], $data['price_netto'], $data['price_brutto'], $data['desc']) ); }
public function saveProduct($data)
{
if (isset($data['id']) && ctype_digit((string)$data['id'])) {
$sql = "UPDATE
products
SET
idCategory = ?, idProducent = ?, name = ?,
price_netto = ?, price_brutto = ?, `desc` = ?
WHERE
id = ?";
$data['price_netto'] = $data['price_brutto'] * 1.22;
$this->_db->executeQuery(
$sql, array(
$data['idCategory'], $data['idProducent'], $data['name'],
$data['price_netto'], $data['price_brutto'], $data['desc'], $data['id'])
);
} else {
$sql = "INSERT INTO
`products` ( `id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc` )
VALUES
(NULL,?,?,?,?,?,?)";
$data['price_netto'] = $data['price_brutto'] * 1.22;
$this->_db->executeQuery(
$sql, array($data['id']), array(
$data['idCategory'], $data['idProducent'], $data['name'],
$data['price_netto'], $data['price_brutto'], $data['desc'])
);
}
}
这里有ProductController.php[我认为这里很重要的部分]: https://codeshare.io/5w4rRD
也适用于 ProducentsModel.php 和 CategoriesModel.php:
public function getProducents()
{
$sql = 'SELECT * FROM producents;';
return $this->_db->fetchAll($sql);
}
public function getCategories()
{
$sql = 'SELECT * FROM categories;';
return $this->_db->fetchAll($sql);
}
很抱歉只给你链接,但这是我第一次使用 Stack Overflow,希望你能理解。
请勿逐字复制此内容,但您的 SQL 遗漏了以下内容:
CREATE TABLE `products` (
id INT UNISIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
... missing part below
CONSTRAINT `FKID_CATEGORY_ID` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE IF NOT EXISTS `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idCategory` int(10) unsigned DEFAULT NULL,
`idProducent` int(10) unsigned DEFAULT NULL,
`name` char(32) COLLATE utf8_bin NOT NULL,
`price_netto` float NOT NULL,
`price_brutto` float unsigned NOT NULL,
`desc` text COLLATE utf8_bin,
PRIMARY KEY (`id`),
KEY `FK_products_1` (`idCategory`),
KEY `FK_products_2` (`idProducent`),
CONSTRAINT `FK_products_1` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`),
CONSTRAINT `FK_products_2` FOREIGN KEY (`idProducent`) REFERENCES `producents` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
数据库很好。该错误在 ProductController.php 中,您可以在上面的 link 中找到它。这是它在编辑和添加选项中的样子:
for ( $i=0; $test[$i] != NULL; $i++) { $choiceCategory[$test[$i]['name']] = $test[$i]['id'];; }
$producentModel = new ProducentsModel($app);
$test = $producentModel->getProducents();
$choiceProducent = array();
for ( $i=0; $test[$i] != NULL; $i++) {
$choiceProducent[$test[$i]['name']] = $test[$i]['id'];
}
并删除此:choice_label
直到 placeholder=>'Choose'
。
抱歉打扰了大家,谢谢你们的快速回答。