【问题标题】:Getting an SQL syntax error on a section of my insert code在我的插入代码的一部分上出现 SQL 语法错误
【发布时间】:2014-09-23 14:30:48
【问题描述】:

我目前正在制作一个允许将记录添加到 phpmyadmin 数据库的 PHP 提交表单。我已经创建了这段代码,并且整晚都在试图找出它有什么问题

当我在表单中输入字段的名称(用于虚拟数据)时,我得到了这个:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近“密码”、“名字”、“姓氏”、“地址”、“电子邮件”、“卡” Number', 'CCV' )' 在第 1 行

<!DOCTYPE html>
<html>
<head><title>Insert Users</title></head>
<body>
<h2>Insert User Confirmation</h2>

<form action="<?php $_SERVER['PHP_SELF']?>" method="post"/> <br> 
<?php
    require_once('connection.php');

    echo    "<label for='memberID' >Member ID:</label>";
    echo    "<input type='text' name='memberID' id='memberID' />";
    echo    "<br /><br />"; 

    echo    "<label for='username' >Username:</label>";
    echo    "<input type='text' name='username' id='username' />";
    echo    "<br /><br />"; 

    echo    "<label for='password' >Password:</label>";
    echo    "<input type='password' name='password' id='password' />";
    echo    "<br /><br />"; 

    echo    "<label for='fName' >Firstname:</label>";
    echo    "<input type='text' name='fName' id='fName' />";
    echo    "<br /><br />";     

    echo    "<label for='lName' >Lastname:</label>";
    echo    "<input type='text' name='lName' id='lName'  />";
    echo    "<br /><br />"; 

    echo    "<label for='address' >Address:</label>";
    echo    "<input type='text' name='address' id='address'  />";
    echo    "<br /><br />"; 

    echo    "<label for='email' >Email:</label>";
    echo    "<input type='text' name='email' id='email'  />";
    echo    "<br /><br />"; 

    echo    "<label for='cardnumber' >Card Number:</label>";
    echo    "<input type='text' name='cardnumber' id='cardnumber'  />";
    echo    "<br /><br />"; 

    echo    "<label for='ccv' >CCV:</label>";
    echo    "<input type='text' name='ccv' id='ccv'  />";
    echo    "<br /><br />"; 

    echo    "<input type='submit' name='submit' value='Submit' />";
    echo    "<input type='reset' value='Clear' />";
    echo    "<br /><br />"; 
?>
</form>


<?php
    if(!isset($_POST['submit'])) {  
        echo 'Please Register';
    }
    else {
        $memberID = $_POST['memberID'];
        $username = $_POST['username'];
        $password = $_POST['password'];
        $fName = $_POST['fName'];
        $lName = $_POST['lName'];
        $address = $_POST['address'];
        $email = $_POST['email'];
        $cardnumber = $_POST['cardnumber'];
        $ccv = $_POST['ccv'];

        $query = "INSERT INTO `members` (MemberID, Username, Password, FirstName, LastName,     StreetAddress, Email, CardNumber, CCV) VALUES ('$memberID', '$username, '$password', '$fName', '$lName', '$address', '$email', '$cardnumber', '$ccv' )";
        mysqli_query($connection, $query)
        or  die(mysqli_error($connection));

        $rc = mysqli_affected_rows($connection);
        if ($rc==1)   
                    {
                    echo '<h4>The database has been updated with the following details: </h4> ';
                    echo 'MemberID: '.$memberID.'<br />';
                    echo 'Username: '.$username.'<br />';
                    echo 'Password: '.$password.'<br />';
                    echo 'First Name: '.$firstname.'<br />';
                    echo 'Last Name: '.$lastname.'<br />';
                    echo 'Address: '.$address.'<br />';
                    echo 'Email: '.$email.'<br />';
                    echo 'Card Number: '.$cardnumber.'<br />';
                    echo 'CCV: '.$ccv.'<br />';
                    }
        else
                    {   
                    echo '<p>The data was not entered into the database this time.</p>';   
                    }
    }

?>
</body>
</html>

【问题讨论】:

  • 亲爱的上帝,不要不要存储抄送数据...
  • 使您的查询多行以更好地查看哪个部分有问题
  • 如果您确实存储了信用卡号码,则必须遵循 PCI 准则。这些准则由支付卡行业制定,定义了您可以做什么和不可以做什么。
  • PCI Compliance 这么多
  • 如果他们在大学里教你这些鲁莽的习惯,他们应该被禁止教任何与信用卡处理有关的东西。想象一下,如果医学院是这样的草率。 “手术前要洗手吗?不,只要在裤子上擦手就行了。”你想知道gigantic hacks 是怎么发生的吗?它以此开头

标签: php mysql sql


【解决方案1】:

由于声誉太低,我无法添加 cmets,所以我在这里回答:

你有没有注意到 '$username 后面缺少的 '?

试试

$query = "INSERT INTO `members` (MemberID, Username, Password, FirstName, LastName,     StreetAddress, Email, CardNumber, CCV) VALUES ('$memberID', '$username', '$password', '$fName', '$lName', '$address', '$email', '$cardnumber', '$ccv' )";

【讨论】:

  • ...毕竟它只是一个 (') 我非常讨厌编码。谢谢
  • 这不是引用问题。这简直是​​疯狂。当使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。这将自动处理任何引用问题。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。无论原始问题的形式如何,任何使用字符串插值的答案都是错误的。
【解决方案2】:

改变你的插入,我认为你做错了

插入members(MemberID,Username,Password,FirstName,LastName,StreetAddress,Email,CardNumber,CCVVALUES@) ', '$username', '$password', '$fName', '$lName', '$address', '$email', '$cardnumber', '$ccv')

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 2014-03-12
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多