无法将信息插入我的数据库。收到错误错误:您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以获得在唯一获得许可的花园附近使用的正确语法。
我已经查找了解决方案并按照列出的步骤来解决问题,例如,将INSRT语句全部放在一行中以避免空格和更改列名但没有运气。我觉得这是我在代码中遗漏的东西。相同的INSRT语句在我的网站上的较小表单上正常工作,但不适用于此网站。
<div id="form">
<form action="sendinvite.php" method="post" class="eventform">
<fieldset id="createeventform" class="fieldset">
<legend style="color:#3b817a">Plan Details and Invite your Connections</legend>
<label>Activity Category:</label>
<input type="text" name="activity_cat" id="aname " value="<?php echo $row['activity_cat']?>"/>
</br>
<label>Activity Name:</label>
<input type="text" name="activity_name" id="aname " value="<?php echo $row['activity_name']?>"/>
</br>
<label>Activity Address:</label>
<textarea id="aaddress" name="activity_address"><?php echo $row['activity_address']?></textarea>
</br>
<label>Activity Description:</label>
<textarea id="adescription" name="activity_description"><?php echo $row['activity_description']?></textarea>
</br>
<label>Date of Activity:</label>
<input type="text" id="date" data-format="DD-MM-YYYY" data-template="D MMM YYYY" name="date"/>
</br>
<label>Time of Activity:</label>
<input type="text" id="time" data-format="HH:mm" data-template="HH : mm" name="datetime"/>
</br>
<label>Message to Invitee</label>
<textarea id="comment" name="activity_message"></textarea>
</br>
<label>Username Address to send</label>
<input type="text" id="username" name="username"/>
</br>
</br>
<input type="submit" name="addconnect" value="Send Invite"/>
</fieldset>
</form>
上面是我的表单,下面是我的php插入我的数据库表user_invites
<?php
session_start();
require_once('connect.php');
if (isset($_POST['addconnect']) && isset($_POST['activity_cat']) && isset($_POST['activity_name']) && isset($_POST['activity_address']) && isset($_POST['activity_description']) && isset($_POST['date']) && isset($_POST['datetime']) && isset($_POST['activity_message']) && isset($_POST['username']) ) {
$sql = "INSERT into `user_invites` (user_id, activity_cat, activity_name, activity_address, activity_description, date, datetime, activity_message, username) VALUES (" . $_SESSION['userSession'] . ",'" . $_POST['activity_cat'] . "','" . $_POST['activity_name'] . "','" . $_POST['activity_address'] . "','" . $_POST['activity_description'] . "','" . $_POST['date'] . "','" . $_POST['datetime'] . "','" . $_POST['activity_message'] . "','" . $_POST['username'] . "')";
if (!mysqli_query($conn,$sql))
{
die('Error: ' . mysqli_error($conn));
}
echo "<p></br>Thank you!</p>
";
mysqli_close($conn);
}
?>
PS。此代码不会生效,仅用于项目目的。我知道代码
的SQL注入问题答案 0 :(得分:1)
您使用单引号来分隔查询中的值。其中一个值还包含一个引号,它会过早地结束值分隔符,并使查询的其余部分的语法无效。
例如,我将您的查询限制为单个字段:
$sql = "INSERT into `user_invites` (activity_description)
VALUES ('" . $_POST['activity_description'] . "')";
^ value start quote ^ value end quote
您的错误消息显示's only licensed garden
附近有错误。看看会发生什么(就SQL而言)如果有人输入了#34; StackOverflow的唯一许可花园&#34;:
$sql = "INSERT INTO `user_invites` (activity_description)
VALUES ('StackOverflow's only licensed garden')";
^ value start quote
^ value end quote
所有来自&#34的唯一许可花园&#34; on现在是无效的SQL。
@cteski通过转义引号意味着您不应该直接在查询中输入用户输入,因为您需要考虑某处某处有'
的可能性。即使您将其更改为双引号,用户也有可能在字段中的某处输入"
。也许它不是StackOverflow's only licensed garden
,而是StackOverflow's only "licensed" garden
。然后,你会遇到单个或双引号的问题。
您可以使用mysqli_real_escape_string()
$sql = "INSERT into `user_invites` (activity_description)
VALUES ('" . mysqli_real_escape_string($conn, $_POST['activity_description']) . "')";
这可以确保值中的任何'
或"
都已正确转义,并且不会破坏您的查询。是的,您应该对用户提供的所有值执行此操作。名称,地址,消息或任何其他表单字段中可能还有引号。