使用默认值插入Mysql行

时间:2014-01-21 22:23:25

标签: php mysql

我需要认真帮助我的sql语句。首先,由于某种原因,bio和user_image的默认值未插入。其次,我的陈述是开启和关闭的。有时它会插入,有时则不会。我需要一些聪明的人帮助。提前致谢。继承我的代码:

$query = "INSERT INTO users VALUES ('{$_POST['display_name']}', '{$_POST['email']}','{$_POST['password']}','active','{$_POST['first_name']}','{$_POST['last_name']}',DEFAULT,DEFAULT)";
mysql_query($query);

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=success.php">';    
    exit;
搞砸了我知道,我正在做这个项目以了解更多有关数据库的知识。继承我的数据库结构:

Field      Type                         Null       Default  
id         int(11)                      No       
username   varchar(255)                 No       
email      varchar(255)                 No       
password   varchar(255)                 No       
status     enum('active', 'inactive')   No       
first_name  text                        No       
last_name   text                        No       
bio         varchar(305)                No         HEY! theres nothing here yet ....Complete your bio if you want to get rid of this lame placeholder text. Use this space on your page to tell the internet a little bit about yourself. Or just make everyone feel bad by listing all of your amazing accomplishments! I prefer the latter.    
user_image  varchar(305)                No         user_profile.jpg 

**已更改但仍无效:

$query = "INSERT INTO users(username, email, password, first_name,last_name)
VALUES ({$_POST['display_name']}, {$_POST['email']}, {$_POST['password']}, {$_POST['first_name']}, {$_POST['last_name']})";

2 个答案:

答案 0 :(得分:1)

您的查询从根本上说是不安全的 - 它可以被利用来插入恶意语句,并且 POOF!您的整个数据库都已消失。你真的,真的需要阅读this SO thread并使用PDO或mysqli,或者如果这绝对不是一个选项,至少使用mysql_real_escape_string

话虽如此,由于您没有进行任何转义,因此其中包含'的任何字符串都会破坏您的查询。假设$_POST['display_name']设置为Frank's Restaurant。然后,您的查询将以INSERT INTO users VALUES ('Frank's Restaurant'开头,并且MySQL会认为查询在Frank之后错误地停止,因为之后是'

此外,正如Glavić建议的那样,您需要为id添加字段,或手动指定字段。

答案 1 :(得分:0)

首先试试这个:

$query = "INSERT INTO users VALUES ('{$_POST['display_name']}', '{$_POST['email']}','{$_POST['password']}','active','{$_POST['first_name']}','{$_POST['last_name']}',null,null)";

如果无法尝试指定要插入的字段。无论如何,这是一个很好的做法。它不是很难,但错误的可能性较小。

我的意思是你应该尝试下一个查询:

insert into SomeTable(Field1, Field2, Field5, Field8) values ($field1Data, $field2Data, $field5Data, $field8Data);

Field3,Field4,Field6,Field7在此之后将是默认值。