数组进入mysql数据库字段

时间:2012-12-11 01:52:48

标签: php mysql arrays forms post

我有一个表单值数组,可以从一个页面发布到另一个页面。

$_POST['ingredients'];

数组中的项目以ingredients[]

的形式发布

我如何连接所有值并将它们放入数据库中一行的一个字段

mysql代码的一个例子是完美的。

由于

$ingredient_method = $_POST['conValue'];
$ingredient_type = $_POST['OneWordDescription'];
$ingredient_element = $_POST['ingredients'];


$sql="INSERT INTO tbl_Recipe (recipe_id, ingredient_method, ingredient_type, ingredient_element)
VALUES
('',$_POST[conValue]','$_POST[OneWordDescription]','$_POST[ingredients]')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

2 个答案:

答案 0 :(得分:4)

您有几个选择:

  1. 使用PHP的serialize函数将数组转换为字符串,然后再将其放入数据库,然后在提取数据时unserialize
  2. 使用PHP的implode将数据转换为字符串,然后在提取数据时explode
  3. 在MySQL中创建另一个表,将每个值作为单独的行插入数据库,然后在查询中使用INNER JOINLEFT JOIN之类的内容将数据拉出来。
  4. <强>更新

    既然您已经发布了代码,我建议您不要使用mysql_*函数。它们已被弃用。使用mysqliPDO。此外,始终对您从用户收到的值使用mysqli_real_escape_stringPDO::quote,以防止SQL注入攻击。

    以下是使用serialize和PDO的示例:

    //get the array
    $ingredient_method = $_POST['conValue'];
    $ingredient_type = $_POST['OneWordDescription'];
    $ingredient_elements = $_POST['ingredients'];
    if(!is_array($ingredient_elements)) {
        //do some error handling
    }
    
    //connect to the database
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $pass = 'dbpass';
    try {
        $pdo = new PDO($dsn, $user, $pass);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    
    //serialize the string
    $elements_str= serialize($ingredient_elements);
    
    //prepare sql
    $sql = 'INSERT INTO tbl_Recipe '.
               '(recipe_id, ingredient_method, ingredient_type, ingredient_element) '.
           'VALUES ( '.
                '"",'. //recipe_id
                $pdo->quote($ingredient_method).','.
                $pdo->quote($ingredient_type ).','.
                $pdo->quote($elements_str).
           ')';
    // insert into database
    $con->query($sql);
    

答案 1 :(得分:0)

好的,不知道你是如何得到一个阵列的成分但是如果是这种情况那么我们就去了。

首先你可以使用implode加入数组,但检查一下是否有任何东西可以避免抛出警告。

//check if $_POST['ingredients'] is available if not then use empty string
$ingredient_element = isset($_POST['ingredients']) ? $_POST['ingredients'] : "";

join the array 
$ingredient_element = implode(" ", $ingredient_element);

现在你至少可以使用mysql_real_escape_string来清理你的字符串,但我建议你学习mysqli或PDO,因为不推荐使用mysql_函数。

//sanitize
$ingredient_element = mysql_real_escape_string($ingredient_element);

然后在insert sql中使用$ ingredient_element

$ sql =“INSERT INTO tbl_Recipe(recipe_id,ingredient_method,ingredient_type,ingredient_element) VALUES ( '',$$ ingredient_method”, '$ ingredient_type', '$ ingredient_element')“;

如果recipe_id是一个自动增量的整数id,你可以把它留空,但如果你必须在那里使用,你必须在''

的地方使用NULL