将多个条目插入一列

时间:2015-03-21 16:42:20

标签: php mysql sql

是否可以在一列中添加多个条目,在其他列中添加单个条目?

例如

$sql="INSERT INTO The_table (firstname, lastname, address) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[address]'";

然后我需要插入多个复选框条目 - 年龄,衬衫尺寸,高度在一列中调用。

我如何编写$ sql语句?

5 个答案:

答案 0 :(得分:3)

您可以非常轻松地在PHP中连接一个字符串,然后将其放入SQL插入查询中。

$about = "AGE: $_POST[age]\nSHIRT SIZE: $_POST[shirt_size]\nHEIGHT: $_POST[height]";
$sql = "INSERT INTO The_table (firstname, lastname, address, about) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[address]', '$about')";

当然,您应该准备语句并使用适当的绑定值:

$sql = "INSERT INTO The_table (firstname, lastname, address, about) VALUES (?, ?, ?, ?)";
// now prepare, bind and execute

如果你没有做准备/绑定的东西,那么你就是安全问题。至少,您需要将适当的转义机制应用于用户提供的数据。

http://php.net/manual/en/mysqli-stmt.execute.php复制示例并为您修改:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Prepare an insert statement */
$query = "INSERT INTO The_table (firstname, lastname, address, about) VALUES (?,?,?,?)";
$stmt = $mysqli->prepare($query);

$stmt->bind_param("ssss", $_POST['first'], $_POST['last'], $_POST['address'], $about);

/* here's where you do your special assignments */
$about = "AGE: $_POST[age]\nSHIRT SIZE: $_POST[shirt_size]\nHEIGHT: $_POST[height]";    

/* Execute the statement */
$stmt->execute();

/* close statement */
$stmt->close();

答案 1 :(得分:1)

您可以使用功能CONCAT

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat

我没有测试它的mysql服务器,但我认为这是一个很好的方法。

$sql="INSERT INTO The_table (firstname, lastname, address, about) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[address]', CONCAT('$_POST[age]', ' ', '$_POST[shirtSize]', ' ', '$_POST[height]')";

希望这有帮助

答案 2 :(得分:1)

一个可能的选项(除了提到的CONCAT之外)是在PHP中创建复合变量。

例如,

$about = $_POST['about1'] . ', ' . $_POST['about2'];

然后在您的查询中,您可以执行以下操作:

$sql="INSERT INTO The_table (firstname, lastname, address) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[address]', '$about'";

如果您不知道$about中有多少不同的条目,那么您可以在表单中创建一些内容,并使用foreach语句抓取数据,例如

foreach ($_POST['about'] as $about) { etc.  }

你已经用这样的形式命名你的变量了。

<input type="text" name="about[]" />

如果你的“关于变量是textarea那么这个:

<textarea name='about[]'></textarea>

答案 3 :(得分:0)

使用PHP concat函数连接字段。

$about="$age|$shirt_size|$height";
$sql = "INSERT INTO table (firstname, lastname, address, about) VALUES ('$fname','$lname','$address', '$about')";

要从数据库中检索相同的内容, 在PHP中使用explode函数。

$about=explode('|',$result['about']);
$age=$about[0];
$shirt_size=$about[1];
$height=$about[2];

答案 4 :(得分:-1)

您可以通过竖线或其他东西分隔您的参赛作品。

如:

$sql="INSERT INTO `The_table` (`firstname`,`lastname`,`address`,`info`) VALUES ('{$_POST[firstname]}','{$_POST[lastname]}','{$_POST[address]}','Red|XXL|50')";