-1

当我提交表单以在我的网站上注册新用户时,它会提交,但是它不会提交到数据库,并且我收到一条错误消息:

无效查询:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '####, 800800800)' 附近使用正确的语法 整个查询:mysql_query

这是我的 MySQL 查询:

    $fname    =   $_POST['fnamein'];
    $lname    =   $_POST['lnamein'];
    $email    =   $_POST['emailin'];
    $phone    =   $_POST['phonein'];
    $password =   sha1($_POST['passwordin']);

    $query='INSERT INTO directoryi (Fname, Lname, password, email, phone) 
    VALUES ('.$fname.', '.$lname.', '.$password.', '.$email.', '.$phone.')';
    $result = mysql_query($query);

    if (!$result) {
        $message  = 'Invalid query: ' . mysql_error() . "\n";
        $message .= 'Whole query: ' . mysql_query;
        die($message);
    }

    echo '<h2>Thank you for registering!</h2>';

    mysql_free_result($result);
    mysql_close($dbconnect);
    ?>

还有我的 HTML 表单:

        <form action="register.php" method='post'>
            <input type="text" class="input-small" style="width: 46%;" name="fnamein" placeholder="First Name">
            <input type="text" class="input-small" style="width: 46%;" name="lnamein" placeholder="Last Name">
            <input type="text" class="input" style="width: 46%;" name="emailin" placeholder="Email">
            <input type="text" class="input" style="width: 46%;" name="phonein" placeholder="ex. 7171234567">
            <input type="password" class="input" style="width: 96%;" name="passwordin" placeholder="Password">
            <button type="submit" class="btn">Register</button>
        </form>        
4

2 回答 2

5

要直接回答您的问题,字符串文字必须用单引号括起来,

$query="INSERT INTO directoryi (Fname, Lname, password, email, phone) 
        VALUES ('" .$fname. "', '" .$lname. "', '".$password."', '".$email."', '".$phone."')";

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-24T00:16:14.230 回答
1

根据您的字段的数据类型,我的猜测是您没有正确地在插入值周围提供单引号。尝试这个:

$query="INSERT INTO directoryi (Fname, Lname, password, email, phone) 
VALUES ('$fname', '$lname', '$password', '$email', '$phone')";

请注意,这假定所有字段都是字符串类型字段(如 varchar)。

您还存在严重的 SQL 注入漏洞,并且正在使用mysql_*已弃用的函数。我强烈建议您学习如何将 mysqli 或 PDO 与准备好的语句一起使用。

于 2013-04-24T00:18:17.443 回答