它没有在数据库中插入值

时间:2012-03-30 12:18:09

标签: php sql database

我正在尝试在数据库中插入一个值,但是当我打开数据库时,该值未插入表中。现在所有的代码都没有拼写错误或类似的东西,但为什么不在数据库表中插入一个值呢?

我只需说这个字段不是主键字段,我只是测试这个非主键字段的字段,如果未插入主键值,它是否会在db表中插入一个值?

以下是代码:

<?php
    session_start();

    $username="xxx";
    $password="xxx";
    $database="mobile_app";

    mysql_connect('localhost',$username,$password);

    @mysql_select_db($database) or die( "Unable to select database");


    $sql="INSERT INTO Session (Course)
    VALUES
    ('$_POST[course]')";

    mysql_close();

    if (isset($_POST['course'])) {

    $_SESSION['course'] = $_POST['course'];

    }

    ?>

6 个答案:

答案 0 :(得分:1)

您需要在那里添加主键。除非主键是自动生成的(标识),否则无法在未指定主键的情况下向数据库添加行。

编辑:正如Damien指出的那样,在定义$ sql变量后,您需要添加以下行。

mysql_query($sql)

答案 1 :(得分:1)

你的问题的答案是否定的。你不能像这样在数据库中插入一个值(没有为主键插入一些值)

答案 2 :(得分:1)

你不应该在某处执行SQL查询吗?目前,您所做的只是将sql查询分配给变量。它永远不会被执行。

(另外,谷歌搜索Bobby Tables ...)

答案 3 :(得分:1)

您是否遗漏了“mysql_query”声明?

  mysql_query($sql);

您必须更改编写查询的方式。它是开放的攻击!

答案 4 :(得分:1)

将您给定的代码段更改为:

<?php
  session_start();
  $username="xxx";
  $password="xxx";
  $database="mobile_app";
  mysql_connect('localhost',$username,$password);
  @mysql_select_db($database) or die( "Unable to select database");
  if (isset($_POST['course'])) {
    $_SESSION['course'] = $_POST['course'];
    $sql="INSERT INTO Session (Course) VALUES (' ". mysql_real_escape_string( $_POST['course'] ) . "' );";
  }
  mysql_query( $sql );
  mysql_close();
?>

答案 5 :(得分:1)

嗯..你必须执行查询,实际上INSERT语句才能生效。

对于一般的代码,你必须从如此古老的教程中学习。 mysql_*函数现在已超过10年,不再维护。 您不应该使用mysql_*函数编写任何新代码。 PHP社区已经转移到make them deprecated。您应该使用PDOMySQLi代替。

并且停止滥用错误抑制运算符@ 。它很慢并且在大多数情况下被认为是有害的。

相反,你应该写一些类似的东西:

// connect to database
$connection = new PDO('mysql:host=localhost;dbname=mobile_app;charset=UTF-8', 
                      'username', 'password');
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// set up the query 
$query = 'INSERT INTO Session (Course) VALUES(:course)';
$statement = $connection->prepare( $query );
$statement->bindParam( ':course', $_POST['course'], PDO::PARAM_STR, 63 );
// last parameter is max length of field in the table

// perform the query
if ( $statement->execute() )
{
     // everything worked
}

如果您想学习如何在MySQL中使用PDO:this tutorial会有所帮助。如果认为MySQLi API是更好的选择,那么你必须自己找一些。