我在使用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;
}
?>
数据库:
错误:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行使用“@ gmail.com,vsjo OK”附近的正确语法
答案 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']);
然而,建议将MySQLi
与prepared statement或PDO一起使用。