在php中从数组插入数据到mysql

时间:2012-05-23 13:45:09

标签: php mysql sql arrays

我有一个数据库test,其表名为table,其中包含两列user& email。 我的下面的代码怎么了?无法将数组$u添加到我的数据库

<?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("test", $con);

    $user = "safwan";
    $email = "esafw@jdjd.com";

    $u = array ( user => $user,
                    email => $email
                   );

    $q =   "INSERT INTO table  VALUES ($u)";

    mysql_query($q) OR die(mysql_error());

    mysql_close($con);
    ?> 

3 个答案:

答案 0 :(得分:3)

您有几个问题:

  1. 您正在尝试将数组直接插入数据库。您需要单独访问这些值。
  2. 您应该在字符串周围使用引号,包括它们是数组中的键时
  3. 您需要了解SQL注入
  4. 您应该考虑从they will soon be going away.
  5. 迁移出mysql_ *函数
  6. table是一个MySQL关键字,如果它实际上是表名

    ,则需要反引号

    mysql_select_db("test", $con);
    
    $user = "safwan";
    $email = "esafw@jdjd.com";
    
    $u = array ( 'user' => $user,
                    'email' => $email
                   );
    
    $q =   "INSERT INTO table (user, email) VALUES ('".mysql_real_escape_string($u['user'])."', '".mysql_real_escape_string($u['email'])."')";
    
    mysql_query($q) OR die(mysql_error());
    
    mysql_close($con);
    ?> 
    
  7. 或者:

    <?php
        $con = mysql_connect("localhost","root","");
        if (!$con)
          {
          die('Could not connect: ' . mysql_error());
          }
    
        mysql_select_db("test", $con);
    
        $user = "safwan";
        $email = "esafw@jdjd.com";
    
        $q =   "INSERT INTO table (user, email) VALUES ('".mysql_real_escape_string($user)."', '".mysql_real_escape_string($email)."')";
    
        mysql_query($q) OR die(mysql_error());
    
        mysql_close($con);
        ?>         
    

答案 1 :(得分:1)

请查看MySQL数据类型。 http://dev.mysql.com/doc/refman/5.5/en/data-types.html

您必须循环遍历数组并单独添加元素。我还建议使用其他东西,如MySQLi或PDO来实现安全http://php.net/manual/en/book.pdo.php

事实上,使用PDO可以“添加数组”(因为它的设计方式)。

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name=? AND password=?);
$stmt->execute(array($_GET['username'], $_GET['password']));

我不会过多详细说明,因为你应该学习一种新技术。使用预处理语句和SQL注入以及其他东西更加安全。

答案 2 :(得分:0)

尝试回显您的查询。它看起来像是:

"INSERT INTO table  VALUES (array)".

当然你不想要的东西。

您可以通过循环遍历数组或直接使用:

来构造插入查询
INSERT INTO table  VALUES ($user, $email)