向DataBase添加信息的问题

时间:2014-02-11 19:13:49

标签: php mysql sql insert

我在使用SQL查询向数据库添加infromatiion时遇到问题。 我多次询问查询,试图改变一些东西,但没有任何变形.... 请帮帮我,我将非常感激。

我的HTML表单:

<form action="functions.php" method="post">
        <div id="form" class="fleft">
            <div class="field">
                <label for="fname">Имя: </label>
                <input type="text" name="fname"/>
            </div>
            <div class="field">
                <label for="sname">Фамилия: </label>
                <input type="text" name="sname"/>
            </div>
            <div class="field">
                <label for="email">Ваш E-mail: </label>
                <input type="email" name="email"/>
            </div>
            <div class="field">
                <label for="message">Сообщение: </label>
                <input type="text" name="message">
            </div>
            <div class="field">
                <input type="submit" name="submit"/>
            </div>
        </div>
</form>

的functions.php:

<?php
include "db_connect.php";
if(isset($_POST['submit']))
{

    $connection = db_connect();
    if($connection) echo "connect <br>";
    else echo "no connect";

    $fname = $_POST['fname'];
    $sname = $_POST['sname'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    $query = "INSERT INTO `mail` (`id`,`fname`,`sname`,`email`,`message`) VALUES ('',$fname,$sname,$email,$message)";

    $result = mysql_query($query);

    if($result) echo "success!";
    else echo mysql_error();
}
?>

db_connect.php:

<?php
    function db_connect()
        {
            $host = 'localhost';
            $user = 'root';
            $password = '';
            $db = 'web';

            $connection = mysql_connect($host, $user, $password);
            mysql_query("SET NAMES utf8");
            if(!$connection || !mysql_select_db($db)){
                return false;
            }
                return $connection;
        }
?>

数据库: structure

错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行使用“@ gmail.com,vsjo OK”附近的正确语法

1 个答案:

答案 0 :(得分:2)

您的VALUES未被转义,这意味着您的VALUES

周围没有引号

使用以下内容:

$query = "INSERT INTO `mail` (`id`,`fname`,`sname`,`email`,`message`) VALUES ('','$fname','$sname','$email','$message')";

,因为您的id列设置为AUTO_INCREMENT,请取出第一个值并在其位置使用以下内容:

$query = "INSERT INTO `mail` (`fname`,`sname`,`email`,`message`) VALUES ('$fname','$sname','$email','$message')";

id列会照顾好自己。

您还应该考虑转移到mysqli_*函数和准备好的语句。 mysql_*函数已弃用,将从以后的版本中删除。

阅读以下内容:How can I prevent SQL injection in PHP?


您是否决定继续使用mysql_*个功能:

(借鉴https://stackoverflow.com/a/60442/

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);
mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

MySQLi 方法:您是否应决定稍后使用mysqli_*函数:(强烈推荐)

$fname = mysqli_real_escape_string($connection,$_POST['fname']);
$sname = mysqli_real_escape_string($connection,$_POST['sname']);
$email = mysqli_real_escape_string($connection,$_POST['email']);
$message = mysqli_real_escape_string($connection,$_POST['message']);

然而,建议将MySQLiprepared statementPDO一起使用。