PHP表单的MYSQL错误

时间:2011-10-04 11:26:28

标签: php mysql forms

这可能是一个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)

我看不到任何语法错误,我哪里错了?如果我收录了太多信息,请道歉。

干杯

5 个答案:

答案 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());