2013-02-07 53 views
-2

我正在使用脚本将用户添加到PHP中的数据库中。在添加任何幻想之前,我想要掌握基本知识。请注意我是PHP新手,我知道我不应该使用mysql_query,我应该使用PDO,但我想确保我有一些工作可以回退。使用MySQL将数据插入到我的数据库中时出错

我得到的错误是这样的:你的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的'第6行

我的查询如下正确的语法手册:

$query = "INSERT INTO users(`username`,`password`,`email`,`regdate`,`isadmin`) VALUES(
`" . mysql_real_escape_string($data['fusername']) . "`, 
`" . md5(sha1($data['fpass'])) . "`, 
`" . mysql_real_escape_string($data['femail']) ."`, 
`NOW()`, 
`1`"; 

(对不起密码散列,我要去稍后加入盐)

我执行它是这样:

$sql = mysql_query($query); 

if(!$sql) 
{ 
    die("Account was unsuccessfully created: " . mysql_error()); 
} 

我试着在$ sql中增加了模具(),但它似乎是回到空白。

我已经尝试删除反引号,用单引号替换它们,在用户()函数中没有反引号 - 它们都没有工作。

任何想法?

+1

请发表您的错误。 –

+1

您只需使用反引号引用[标识符](http://dev.mysql.com/doc/refman/5.0/en/identifiers.html)。值用单引号(或双引号)引用。此外,MySQL扩展已被弃用。您应该使用PDO或MySQLi代替 – Phil

回答

0

它应该是这样的。希望它能帮助你。

$query = "INSERT INTO users(username,password,email,regdate,isadmin) VALUES(
'".mysql_real_escape_string($data['fusername'])."', 
'".md5(sha1($data['fpass']))."', 
'".mysql_real_escape_string($data['femail'])."', 
'NOW()', 
'1'"; 
+0

从技术上讲,它应该**不会使用任何以'mysql_ *'开头的内容。另外,你不会引用NOW(),并且你错过了一个关闭''' – Phil

+0

我已经发布了这个,但是StackOverflow似乎错了我的评论。 我不知道是否有可能将多个答案标记为最好,所以我会发布什么修复它在这里。 1)我删除反引号,并用单引号替换它们。 2)我删除了NOW()附近的引号。 3)我添加了一个缺失的结束括号。 – Seabody

0

不需要在值中包含块引号。每当出现错误时,请检查您的查询两次或三次。你可以试试这个,

$query = "INSERT INTO users(`username`,`password`,`email`,`regdate`,`isadmin`) 
    VALUES('". mysql_real_escape_string($data['fusername']) . "', '" . md5(sha1($data['fpass'])) . "', '" . mysql_real_escape_string($data['femail']) ."', NOW(), '1')"; 

注意:mysql_real_escape_string是不推荐使用的函数。 http://php.net/manual/en/function.mysql-real-escape-string.php

相关问题