我的数据库包含以下数据:
fish
---
id
name
cooking_type_id
---
cooking_type
---
id
name
---
cooking_type_relationships
---
fish_id
cooking_type_id
---
我正在尝试创建一个向数据库添加鱼的表单。一切正常,但添加许多关系时遇到问题。通过表格,我已经制作了一个包含所有烹饪类型的复选框列表,用户点击了所有适合鱼类的烹饪类型。但是我如何查询数据库以便很好地创建关系呢?
以下是创建复选框列表的代码:
include 'conn.php';
echo "<ul class='cooking-list'>";
$query = "SELECT * FROM cooking_type c";
$result = $mysqli->query($query);
mysqli_query($mysqli, "SET NAMES 'utf8'");
while($row = mysqli_fetch_array($result))
{
// run through the results from the database, generating the checkboxes
echo "\n\t<li>";
echo "<input id='".$row['name']."' type='checkbox' name'type_id'><p>{$row['name']}</p>";
echo "</li>";
echo "<br><br>";
}
echo "</ul>";
mysqli_close($mysqli);
编辑:我没有让查询正常工作。我此时有点困惑。这是我试图发布的查询:
include 'conn.php';
mysqli_query($mysqli, "SET NAMES 'utf8'");
$query = "INSERT INTO fish (name, image, about, season_id)
VALUES ('$_POST[name]', '$_POST[image]', '$_POST[about]', '$_POST[season_id]');
INSERT INTO cooking_type_relationships (fish_id, cooking_type_id)
VALUES (mysqli_insert_id, cooking_type_id);"
$mysqli->query($query);
mysqli_close($mysqli);
答案 0 :(得分:1)
为此,您需要将数据插入两个表,fish表和cooking_types_relationships表。
伪代码:
insert into fish values (a, b, c);
insert into cooking_types_relationships values (mysqli_insert_id, cooking_type_id);
这里的诀窍是使用mysqli_insert_id。
答案 1 :(得分:1)
您无法在一个查询中发出2个请求。这是由于安全问题。 从$ _POST获取值时,请始终引用您的密钥 我假设你的mysql表中你的id列有primary和auto_increment标志。
然后尝试执行以下操作:
include 'conn.php';
mysqli_query($mysqli, "SET NAMES 'utf8'");
$query = "INSERT INTO fish (name, image, about, season_id)
VALUES ('$_POST['name']', '$_POST['image']', '$_POST['about']', '$_POST['season_id']')";
mysqli_query($mysqli, $query);
$id = mysqli_insert_id($mysqli);
$query = "INSERT INTO cooking_type_relationships (fish_id, cooking_type_id)
VALUES (". $id . ", ".$cooking_type_id.")";
mysqli_query($mysqli, $query);
mysqli_close($mysqli);
您必须以与fish id类似的方式找到正确的$ cooking_type_id。或者你可能已经知道它是否是固定的烹饪类型列表
您还混淆了程序和面向对象的查询方式。 $ mysqli-&gt; query()是面向对象的,我认为这不是你需要的。
请记住在生产中使用它之前过滤$ _POST值。正如其他提到的那样看PDO准备好的陈述
如果您想再次获取数据,可以像这样进行内连接:
SELECT * FROM fish
INNER JOIN cooking_type_relationships ON fish.id=fish_id
INNER JOIN cooking_type ON cooking_type_id=cooking_type.id
如果鱼没有任何烹饪类型,但您仍然希望它显示为结果,您只需将内部连接更改为LEFT JOIN