PHP/MySQL外键将id = 0保存为数据库
我是新来的PHP和MySQL,但有一个项目,我必须对我的类与Silex 2.0和Symfony做和我有我的PHP代码和外国的问题数据库中我的产品表中的键。PHP/MySQL外键将id = 0保存为数据库
问题是在我的程序中保存功能的正确方法。
下面是我的数据的基础上发生的事情,当我尝试添加或编辑新产品 - 我得到idCategory和idProducent = 0:/
而且有我的代码部分ProductModel.php负责保存它数据库(表产品):
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);
}
对不起,让你只链接但是这是我第一次与堆栈溢出,希望你能够理解。
数据库的罚款。该错误是在ProductController.php中,你可以在那里找到链接。这是怎么想的样子在这两个编辑和添加选项:(!$ i = 0; $测试[$ i] = NULL; $ I ++)
为{ $ choiceCategory [$测试[$ 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'
。
对不起,打扰你们,并感谢您快速回答。
不要复制此逐字但你的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;
我做了你所说的,我添加了表格类别和产品的外键,这里是我有: http://screenshot.sh/mE94ENVCQ2zgE http://screenshot.sh/ m7wozmtmkH41y – Abadd0n
这是可以预料的。完整性约束是阻止您删除父项并将其作为幻影记录留下的“子项”。如果两者可以独立存在,FK需要为NULL。 –
发布您的SQL架构的转储 - 在文本形式,所以我可以快速复制和粘贴:) –
你能分享你的表格结构吗? –
http://screenshot.sh/oe5YXJ1HXU3Jq http://screenshot.sh/n9GN2B179sVUM – Abadd0n
您使用的是MyISAM还是InnoDB? –