2013-05-19 42 views
0

当我试图通过PHP插入一条记录到MySQL时,我遇到了一个非常奇怪的问题,我想知道是否有人可以摆脱它的任何光线,因为我不知道想法现在。通过PHP MySQL INSERT问题mysql_query

数据库表:

Field  Type  Null Default Comments 
UserID  bigint(20) No  Autoincrement 
UserGUID text  No  
ServerID int(11)  No  
UserName text  No  
Passwrd  text  No  
Prompt  text  No  
Answer  text  No  
EMail  text  No  
Verified int(11)  No 0  
Language text  No  
Gender  int(1)  Yes  NULL  
DateOfBirth int(11)  Yes  NULL  
Country  int(11)  Yes  NULL  
PostCode text  Yes  NULL  
State  text  Yes  NULL  
Town  text  Yes  NULL  

相关的PHP代码片段...

public function signupUser($uid, $pwd, $prompt, $answer, $email, $lang, ... &$result) 
{ 
    $guid = $this->getGUID(); 

    $serverID = 1; 
    $result = mysql_query("INSERT INTO User(UserGUID, ServerID, UserName, Passwrd, EMail) " + 
            "VALUES ('$guid', $serverID, '$uid', '$pwd', '$email')"); 

之前有人告诉我,我应该使用库MySQLi,参数化我的查询之类的,请注意,这个PHP/MySQL只是一个本地测试工具,在专用网络上,只有在真正的Web服务(dotNet/Oracle)可用时才用于开发目的。

所以,如果我调用该函数上面合适的参数,$结果回来了......

您的SQL语法错误;检查对应于您的MySQL服务器版本的手册正确的语法使用近“0”在行1

,但如果我降低了查询,只是...

$result = mysql_query("INSERT INTO User(UserGUID, ServerID, UserName, Passwrd) " + 
             "VALUES ('$guid', $serverID, '$uid', '$pwd')"); 

它的作品!很高兴地插入记录(尽管在非空字段中有空值!?!)为了增加更多的复杂性,如果我使用合适的值运行(原始)查询,例如

INSERT INTO User(UserGUID, ServerID, UserName, Passwrd, EMail) VALUES ('guid', serverID, 'uid', 'pwd', 'email') 

直接对数据库通过phpMyAdmin,它也可以!

这使我疯狂。我试着改变字段名称,可空性,顺序,我在查询中使用哪些字段(在前四个工作之后),值 - 它们都没有什么不同。它几乎看起来好像不需要超过四个字段。

请......任何人......?我真的很难理解为什么它不接受第五个领域,我没有任何意义。不幸的是,返回的错误根本没有任何帮助,太模糊,似乎等同于MS发生的所谓“错误”。

如果我必须更换为mysqli,我会但我宁愿不必重新制作测试设备,如果我可以避免它。

+0

由于您正在创建整个SQL查询(无绑定等),因此将其放入字符串中,执行并将其写入屏幕:'$ sql =“INSERT ...”; echo $ sql; $ result = mysql_query($ sql);'并且在返回错误时查看查询的实际外观。 –

+1

php中的连接是用'.',而不是'+'完成的。这可能是问题 –

+0

@VedranŠego好吧,我!你已经间接地为我回答了。我完全不熟悉PHP(正如你可能已经猜到的那样),并且一直使用+作为字符串连接运算符,因为它似乎可以在其他地方使用。多么flamin'白痴我假设+会是concat。请随意添加,作为正式答案,我会标记它。 @爆炸药对不起队友,他击败了你,但你现在就是。 – Mike

回答

1

编辑后的启示:看看在php中的连接运算符是绝对的意见。不是+我会把钱放在那里是你的问题......在我的第一眼看来,甚至没有看到它。

在过去的香港专业教育学院运行到奇怪的烦恼有点类似于此

- 并能在反引号columnX封装我的表和列名,columnY解决它 - 我也尝试表名“用户”之间加空格和包含在SQL语法

mysql_query("INSERT INTO User(UserGUID, ServerID, UserName, Passwrd, EMail) " + 
           "VALUES ('$guid', $serverID, '$uid', '$pwd', '$email')"); 

列名的括号看看this question?非常相似,你的结果成功

希望我能有一些帮助

+0

感谢队友,一些有用的东西,看看那里。 – Mike

0

如果您的例子是文字,我怀疑任何作品。字符串连接运算符是“。”不是“+”在PHP中。此外,PHP不会解释单引号内的变量。尝试重新编写查询这样的:

$result = mysql_query("INSERT INTO User SET UserGUID = '" . $guid . "', ServerID = " . $serverID . ", UserName = '" . $uid . "', Passwrd = '" . $pwd . "'"; 
+0

这个例子是字面的,是的,它是'+'。然而,这些变量很高兴在单引号中解释并进入数据库。 – Mike

0

我总是创建一个字符串中的SQL,并且,如果有问题,我插入一个echo $sqlerror_log($sql)声明。

有时候会有一些非常微妙的东西。当您将调试输出中的查询复制并粘贴到phpMyAdmin中时,您将看到更有意义的错误消息。

有一件事是可能的,变量$email包含突破字符串的东西。在将它们包含在SQL查询中之前,请确保您使用mysql_real_escape_string