Php 注册用户表单MySQL语法错误

Php 注册用户表单MySQL语法错误,php,html,mysql,forms,Php,Html,Mysql,Forms,当我提交表单在我的网站上注册一个新用户时,它会提交,但是它不会提交到数据库,我会收到一个错误,如下所示: 无效查询:SQL语法中有错误;检查手册 对应于MySQL服务器版本的正确语法 在第2行的“整个查询:mysql\U查询”附近使用“####,800800800)” 下面是我的MySQL查询: $fname = $_POST['fnamein']; $lname = $_POST['lnamein']; $email = $_POST['e

当我提交表单在我的网站上注册一个新用户时,它会提交,但是它不会提交到数据库,我会收到一个错误,如下所示:

无效查询:SQL语法中有错误;检查手册 对应于MySQL服务器版本的正确语法 在第2行的“整个查询:mysql\U查询”附近使用“####,800800800)”

下面是我的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);
    ?>
$fname=$\u POST['fname'];
$lname=$_POST['lname'];
$email=$_POST['emailin'];
$phone=$_POST['phonein'];
$password=sha1($_POST['passwordin']);
$query='INSERT-INTO-directoryi(Fname、Lname、密码、电子邮件、电话)
值(“.$fname.”、“.$lname.”、“.$password.”、“.$email.”、“.$phone.”);
$result=mysql\u query($query);
如果(!$result){
$message='无效查询:'.mysql\u错误()。“\n”;
$message.=“整个查询:”.mysql\u查询;
死亡($信息);
}
echo‘感谢您的注册!’;
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>        

登记

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

$query="INSERT INTO directoryi (Fname, Lname, password, email, phone) 
        VALUES ('" .$fname. "', '" .$lname. "', '".$password."', '".$email."', '".$phone."')";
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用
PreparedStatements
可以避免在值周围使用单引号


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

$query="INSERT INTO directoryi (Fname, Lname, password, email, phone) 
VALUES ('$fname', '$lname', '$password', '$email', '$phone')";
注意,这假设所有字段都是字符串类型的字段(如varchar)

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

请不要使用字符串连接构建查询-这是最常见的安全缺陷之一。阅读SQL注入