2012-03-30 48 views
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"); 


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

    mysql_close(); 

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

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

    } 

    ?> 
+3

**警告**您的代码容易受到SQL注入攻击。 – 2012-03-30 12:19:20

+6

你永远不会执行你的查询,你只需定义一个包含它的变量。 – jprofitt 2012-03-30 12:19:30

+3

@DanielA。白人脆弱?它甚至不执行它:) – 2012-03-30 12:20:18

回答

1

您将需要添加主键在那里。除非主键是自动生成的(身份),否则不能在没有指定主键的情况下向数据库添加行。

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

mysql_query($sql) 
+3

是的,并使用mysql_query()也许? – 2012-03-30 12:20:42

+0

达米恩是对的,我完全忘了使用mysql查询。我是一个白痴。谢谢:) – user1394925 2012-03-30 12:22:49

+0

呀没看到,好地方达明我已经把它添加到我的编辑+1你:) – mattytommo 2012-03-30 12:23:35

1

您的问题的答案是否定的。您不能像这样向数据库中插入值(不插入主键的某个值)

+0

他可以PK没有必要afaik(它可能只是一个AI)。只是他没有这样做。 – 2012-03-30 12:26:33

+0

但是,如果数据库有一个PK,那么它的价值需要被插入,除非另有自动生成 – 2012-03-30 12:28:41

1

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

(另外,做谷歌搜索鲍比表...)

1

是否缺少了 “的mysql_query” 声明?

mysql_query($sql); 

你必须改变你写的查询方式。攻击是开放的!

+0

好,_this_易受注射 – 2012-03-30 12:22:18

+0

@DamienPirsy:是的。我在答复中提到,并upvoted由丹尼尔 – Shyju 2012-03-30 12:24:00

+0

恕我直言,这个问题,这将是更好的_correct_而不是说答案,第一评论“这是代码,但不要做这样的” :) – 2012-03-30 12:25:02

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(); 
?> 
1

嗯..你必须执行查询,实际上是INSERT声明生效。

至于一般的代码,你必须从这么古老的教程中学到东西。现在的功能已经超过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 
} 

如果你想了解如何使用PDO与MySQL:this tutorial会有所帮助。如果认为MySQLi API会是一个更好的选择,那么你将不得不自己找一些。