在尝试通过 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代码的片段......
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,我会,但如果可以避免的话,我宁愿不必重新制作测试工具。