Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php和mysql从表单插入数据库表时接收错误_Php_Mysql_Database_Mysqli_Insert - Fatal编程技术网

使用php和mysql从表单插入数据库表时接收错误

使用php和mysql从表单插入数据库表时接收错误,php,mysql,database,mysqli,insert,Php,Mysql,Database,Mysqli,Insert,无法将信息插入我的数据库。接收错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near唯一许可garden的正确语法 我已经查找了解决方案,并按照列出的步骤解决了问题,例如,将INSRT语句全部放在一行中,以避免空格和更改列名,但运气不佳。我觉得这是我的代码中缺少的东西。同样的INSRT声明在我的站点上的一个较小的表单上运行良好,但在这个表单上不起作用 <div id="form"> <form action="sendinvite.php" me

无法将信息插入我的数据库。接收错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near唯一许可garden的正确语法

我已经查找了解决方案,并按照列出的步骤解决了问题,例如,将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>

计划细节并邀请你的联系人
活动类别:

活动说明:
活动日期:
活动时间:
给被邀请者的信息
要发送的用户名地址

上面是我的表单,下面是我要插入到名为user\u的数据库表中的php

<?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);

}

?>

您正在使用单引号来分隔查询中的值。其中一个值还包含一个引号,这会过早结束值分隔符,并使查询其余部分的语法无效

例如,我将您的查询限制为单个字段:

$sql = "INSERT into `user_invites` (activity_description)
        VALUES ('" . $_POST['activity_description'] . "')";
                ^ value start quote                    ^ value end quote
您的错误消息显示
的唯一许可花园附近有错误。看看如果有人输入“StackOverflow唯一许可花园”的描述,会发生什么(就SQL而言):

从“唯一许可花园”开始的所有内容现在都是无效的SQL

@cteski转义引号的意思是,您不应该将用户输入直接放在查询中,因为您需要考虑其中某个地方存在
”的可能性。即使您将其更改为双引号,用户也有可能在某个字段的某个位置输入
。可能它不是
StackOverflow的唯一许可花园
,而是
StackOverflow的唯一“许可”花园
。然后您会遇到单引号或双引号的麻烦

您可以通过使用
mysqli\u real\u escape\u string()
来解决这个问题:


这可以确保值中的任何
都被正确转义,并且不会中断查询。是的,您应该对用户提供的所有值执行此操作。姓名、地址、邮件或任何其他表单字段中也可能有引号。

看起来您需要在插入前转义引号。您好,谢谢您的回复。你说的转义引号是什么意思?你是说插入前的“双”字吗?应该是单字吗?
$sql = "INSERT INTO `user_invites` (activity_description)
        VALUES ('StackOverflow's only licensed garden')";
                ^ value start quote
                              ^ value end quote
$sql = "INSERT into `user_invites` (activity_description)
        VALUES ('" . mysqli_real_escape_string($conn, $_POST['activity_description']) . "')";