0

我有一个带有两列&test的表名的数据库。我下面的代码有什么问题?我无法将数组添加到我的数据库tableuseremail$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);
    ?> 
4

3 回答 3

3

你有几个问题:

  1. 您正在尝试将数组直接插入到数据库中。您需要单独访问这些值。

  2. 您应该在字符串周围使用引号,包括它们何时是数组中的键

  3. 你需要了解 SQL 注入

  4. 您应该考虑从 mysql_* 函数迁移出去,因为它们很快就会消失。

  5. table 是 MySQL 关键字,如果它实际上是表名,则需要反引号

    $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) 或死(mysql_error()); mysql_close($con); ?>

或者:

<?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);
    ?>         
于 2012-05-23T13:48:00.953 回答
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 注入等东西更安全。

于 2012-05-23T13:47:45.410 回答
0

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

"INSERT INTO table  VALUES (array)".

肯定是你不想要的。

您可以通过遍历数组或直接使用来构造插入查询:

INSERT INTO table  VALUES ($user, $email)
于 2012-05-23T13:48:18.480 回答