php - 从 PHP 插入多个 MySQL 时出现问题

标签 php html mysql

我正在尝试使用新条目更新菜品表,并将其交叉引用到现有的配料表。对于添加的每道菜,用户需要在多行中分配现有成分和所需的体积。提交后,菜肴应输入“菜肴”表中,指定的配料应输入“DishIng”链接表中。

我的 table 是这样设置的:

Table: "Dishes" Columns: DishID, DishName, Serves, etc...
Table: "DishIng" Columns: DishID, IngID, Volume
Table: "Ingredients" Columns: IngID, IngName, Packsize etc...

HTML:

<form action="Array.php" method="post">
<ul>
<li>DishID: <input type="text" name="DishID"></li>
<li>Name: <input type="text" name="DishName"></li>
<li>Catagory : <input type="text" name="DishCatID"></li>
<li>Serving: <input type="text" name="Serving"></li>
<li>SRP: <input type="text" name="SRP"></li>
<li>Method : <input type="text" name="Method"></li>
<li>Source : <input type="text" name="SourceID"></li>
<br>
<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>

<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>

<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>

</ul>
<input type="submit">
</form>

任何有关在 HTML 中动态添加一行成分的建议都非常受欢迎。

PHP:

<?php

require_once('db_connect.php');

$DishID = mysqli_real_escape_string($con, $_POST['DishID']);
$DishName = mysqli_real_escape_string($con, $_POST['DishName']);
$DishCatID = mysqli_real_escape_string($con, $_POST['DishCatID']);
$Serving = mysqli_real_escape_string($con, $_POST['Serving']);
$SRP = mysqli_real_escape_string($con, $_POST['SRP']);
$Method = mysqli_real_escape_string($con, $_POST['Method']);
$SourceID = mysqli_real_escape_string($con, $_POST['SourceID']);
$IngID = mysqli_real_escape_string($con, $_POST['IngID']);
$Volume = mysqli_real_escape_string($con, $_POST['Volume']);

$array = array('$DishID', '$IngID', '$Volume');


$sql="INSERT INTO Dishes (DishID, DishName, DishCatID, Serving, SRP, Method, SourceID)
VALUES ('$DishID', '$DishName', '$DishCatID', '$Serving', '$SRP', '$Method', '$SourceID')";

$sql2 = "INSERT INTO DishIng (DishID, IngID, Volume) VALUES ('$DishID', '$IngID', '$Volume')";

$it = new ArrayIterator ( $array );

$cit = new CachingIterator ( $it );

foreach ($cit as $value)
{
  $sql2 .= "('".$cit->key()."','" .$cit->current()."')";

    if( $cit->hasNext() )
    {
        $sql2 .= ",";
    }
}

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";


if (!mysqli_query($con,$sql2)) {
  die('Error: ' . mysqli_error($con));
}
echo "records added";


require_once('db_disconnect.php');
php?>

当前提交时,它仅更新“Dishes”表并给出以下消息:“1 条记录添加错误:您的 SQL 语法中有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '('0','$DishID'),('1','$IngID'),('2','$Volume') 附近使用的正确语法' 在第 1 行'

最佳答案

对于您的 $sql2,您在 foreach 循环中添加的第一行不以逗号分隔。它也没有相同数量的字段(3 和 2)。

$sql2 = "INSERT INTO DishIng (DishID, IngID, Volume) VALUES ('$DishID', '$IngID', '$Volume')"; // 3 fields
...
$sql2 .= "('".$cit->key()."','" .$cit->current()."')"; // 2 fields

实现此目的的一个好方法是将字符串存储在数组中,并使用 implode 函数和 ',' 作为粘合剂。逗号将自动插入两个元素之间。

关于php - 从 PHP 插入多个 MySQL 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25989551/

相关文章:

mysql - 在查询中添加第三个表会减慢结果时间

php - 从 mysql 获取空白输出。以前从未使用过 "%s"

PHP file_get_contents() 问题

php - 无法与主机 mailtrap.io 建立连接 [php_network_getaddresses : getaddrinfo failed: No such host is known. #0]

php - 无法访问 Facebook Graph API

python - IMG() 中的 Web2Py CSS 样式

javascript - 无法使用 JQuery 模拟点击

php - MYSQL、PHP while循环内的两个连接

PHP 将字符串转换为持续时间

python - 如何从我收到的电子邮件中的超链接中提取 URL?