这可能是一个noob问题,但我发现我的代码没有任何问题,我仍然遇到mysql错误。
我正在使用此代码将表单提交给MYSQL数据库 - >
if($forename == '' || $surname == '' || $email == '' || $address1 == '' || $address2 == '' || $terms == ''){
$_SESSION['status'] = 'error';
} else {
$sql = "INSERT INTO dbEntry ('forename','surname','email','address1','address2','terms')
VALUES ('$forename','$surname','$email','$address1','$address2','$terms')" or die(mysql_error());
$results = mysql_query($sql);
if ($results) { echo "Details added."; }
//if (mysql_error()) echo mysql_error();
$_SESSION['status'] = 'success';
}
//Print query for debugging ->
echo $sql;
但它抛出了这个错误 - >
INSERT INTO dbEntry('forename','surname','email','address1','address2','terms')VALUES('asd','asd','asd @ asd.com',' ASD”, '如', 'NULL')
错误:SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在''forename','surname','email','address1','address2','terms'附近使用正确的语法)VALUES('asd','as '第1行
我已经为这个结构创建了一个表 - >
id INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
forename VARCHAR(32) NOT NULL,
surname VARCHAR(32) NOT NULL,
email VARCHAR(64) NOT NULL,
address1 VARCHAR(64) NOT NULL,
address2 VARCHAR(64) NOT NULL,
terms TINYINT(1)
我看不到任何语法错误,我哪里错了?如果我收录了太多信息,请道歉。
干杯
答案 0 :(得分:2)
不要在插入列列表中用单引号括起列名。
INSERT INTO dbEntry (forename,surname,email,address1,address2,terms) VALUES ('asd','asd','asd@asd.com','asd','as','NULL')
如果您的列名恰好是MySQL保留关键字,或者包含空格,连字符或其他特殊但有效的字符,则必须将它们包围在反引号中:
INSERT INTO tbl (`desc`, `space table`, `etc`)...
作为提示,当MySQL打印语法错误时,99%的时间错误发生在right syntax to use near "
开头语句开始的确切字符处。
答案 1 :(得分:1)
INSERT INTO dbEntry (forename,surname,email,address1,address2,terms) VALUES ('asd','asd','asd@asd.com','asd','as','NULL')
答案 2 :(得分:1)
你有一些奇怪的事情......
$sql = "INSERT INTO dbEntry ('forename','surname','email','address1','address2','terms')
VALUES ('$forename','$surname','$email','$address1','$address2','$terms')" or die(mysql_error());
实际上没有意义 - 你要为字符串赋值并告诉程序死(使用mysql_error())如果字符串为空 - die()应该反映来自mysql_query的响应( )函数 - 当函数返回false时,你希望它死掉。哦,正如@Michael指出的那样 - 不要用引号(撇号)包装你的字段名称 - 如果需要,请使用反引号。
if ($results) { echo "Details added."; }
$_SESSION['status'] = 'success';
这意味着您只会回显“已添加详细信息”,只有如果查询成功执行 - 但即使查询失败,您也会将“成功”分配给$ _SESSION ['status']
我会尝试更像以下内容;我已经放了一些逃脱 - 以防万一你错过了它们:)因为PHP是松散类型的空字符串而且(int)0可以被评估为(bool)false - 所以!$forename
将等同于{ {1}}。
$forename == ''
答案 3 :(得分:0)
看起来它正在尝试在术语字段中插入字符串“NULL”,这是一个int。
答案 4 :(得分:-1)
您应该不为列列表使用引号。还可以使用转义函数来确保在将某些内容放入数据库时没有任何错误。
$sql = "INSERT INTO (field, field) VALUES = ('". mysql_real_escape_string( $field ) ."', '". mysql_real_escape_string( $field ) ."')";
为了获得更好的错误,请在查询函数中使用它:
mysql_query( $sql ) or trigger_error (mysql_error());
或者取决于您是否要继续运行脚本
mysql_query( $sql ) or die (mysql_error());