MySQL INSERT通过PHP mysql_query发出问题

时间:2013-05-19 01:41:25

标签: php mysql

当我尝试通过PHP将记录插入mysql时,我遇到了一个非常奇怪的问题,我想知道是否有人可以对它进行任何解释,因为我现在已经没有想法了。

数据库表:

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代码的Snippit ......

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)可用。

因此,如果我使用合适的参数调用上面的函数,$ result将返回...

您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行的”0“附近使用正确的语法

但如果我将查询简化为......

$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,我会,但如果我可以避免,我宁愿不必重新制作测试工具。

3 个答案:

答案 0 :(得分:1)

启动后编辑:看看php中的连接运算符的注释绝对是一个。不是+我会把你的问题放在那里的钱......甚至在我第一眼就看不到它。

在过去我遇到了与此类似的奇怪问题 - 并且能够通过将我的表格和列名称封装在反引号columnXcolumnY中来解决它 - 我也会尝试添加空格表名'User'和包含SQL语法

中的列名的括号之间
mysql_query("INSERT INTO User(UserGUID, ServerID, UserName, Passwrd, EMail) " + 
                               "VALUES ('$guid', $serverID, '$uid', '$pwd', '$email')");

看看this question?非常类似于你的成功结果

希望我能得到一些帮助

答案 1 :(得分:0)

如果你的例子是文字,我怀疑是否有效。字符串连接运算符是“。”在PHP中不是“+”。另外,php不会解释单引号内的变量。尝试重写这样的查询:

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

答案 2 :(得分:0)

我总是在字符串中创建SQL,如果有问题,我会插入echo $sqlerror_log($sql)语句。

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

有一点可能是变量$email包含突破字符串的内容。确保在将PBP变量包含在SQL查询中之前使用mysql_real_escape_string