当前位置: 首页 > 知识库问答 >
问题:

在SQL insert查询中处理用户输入文本中的引号

毕富
2023-03-14

我在一个Ajax表单上遇到了一个问题,因为用户在描述字段中输入了报价,所以不允许提交表单。

我通过ODBC连接到数据库,并使用Ajax表单将值插入数据库。

我尝试使用以下方法

$problemDescription = addslashes($_POST['problemdescript']); 

但是错误还是一样的,那就是。。。

"PHP Warning:  odbc_exec(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 's'., SQL state 37000 in SQLExecDirect in D:\inetpub\wwwroot\SMT_Request_DevWIP\board\newJob.php on line 89"

下面是我在PHP中的insert查询。。。

//Statement to insert into table
$SQL = "INSERT INTO dbo.[table1] (requestorName, requestedDate, problemDescription, Attachment, Status, Category, Reason, Action_Required,
    Area, Model, Board, Side, Revision, Line) VALUES ('$requestorName', '$requestorDate', '$problemDescription', '$addattachment', '$Status',
    '$Category', '$Reason', '$actionRequired', '$Area', '$Model', '$Board', '$Side', '$Revision', '$Line')";

共有1个答案

邢寒
2023-03-14

这是经典的SQL注入。 您的应用程序将因此受到损害或破坏,因为您信任用户输入,而您永远不能信任用户输入。

您需要使用准备好的语句/参数化查询。 这将正确处理您的用户输入,使其免受SQL注入攻击。 根据您使用的驱动程序,有一些稍微不同的方法来实现它。 简短的版本是创建一个带有输入占位符的查询,然后通过函数(而不是字符串替换)将值输入到这些占位符中。

Microsoft有驱动程序的文档; 如果您正在使用另一个驱动程序,请参考它的文档。

 类似资料:
  • TextInput 是一个允许用户输入文本的基础组件。它有一个名为 onChangeText 的属性,次属性接受一个函数,而此函数会在文本变化时被调用。另外还有一个名为 onSubmitEditing 的属性,会在文本被提交后(用户按下软键盘上的提交键)调用。 胶乳我们要实现当用户输入时,将其以单词为单位翻译为另一种文字。我们假设这另一种文字是一堆有趣的东西:。 export default c

  • 为了让用户和你的应用进行交互,我们可以用v-on指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法: <div id="app-5"> <p>{{ message }}</p> <button v-on:click="reverseMessage">逆转消息</button> </div> var app5 = new Vue({ el: '#app-5', dat

  • 问题内容: 您使用哪种SQL技巧将数据输入到两个表之间,并在两个表之间使用循环引用。 员工属于部门,部门必须有经理(部门负责人)。 我是否必须禁用约束才能进行插入? 问题答案: 问: 是否必须禁用约束才能进行插入? 答: 在Oracle中,否,如果外键约束为否,则为否 (请参见下面的示例) 对于Oracle: 让我们解压一下: (必须禁用自动提交) 推迟执行外键约束 在“部门”表中插入一行,并为F

  • 问题内容: 我有一个HTML表单,可以接受用户输入的大小约为1000的文本,并将其提交到php页面,并将其存储在mysql数据库中。我将PDO与准备好的语句一起使用以防止sql注入。但是,要清理用户输入的文本,需要做的最大努力是什么? 我想防止任何脚本注入,xss攻击等。 问题答案: 安全是一个有趣的概念,吸引了很多人。不幸的是,这是一个复杂的主题,甚至专业人士也弄错了。我在Google(CSRF

  • 查询工作正常,并返回列中有的所有记录。 但是,如果我想获取在中存在的所有记录,我就无法形成正确的查询。 查询不转义单引号,而是按字面意思转义,导致查询不完整。

  • 这只是我给tkinter文本输入框在pyplay中的一次尝试。我很确定它不会正常工作,但决定无论如何都要试一试,因为我没有什么可失去的。tkinter屏幕不显示,直到你退出pyplay。所以,我不是问是否有人知道如何修复代码,而是问是否有人知道在pyplay中创建文本框的最简单方法。我知道有一个文本输入类模块可以导入。如果你认为这是最简单的方法,那么你能告诉我吗?如果没有,请告诉我你认为最简单的方

  • 我有一个简单的java程序,接受3个用户输入类型的整数,双和字符串。我想知道对所有这些输入执行错误处理的最佳/最有效的方法,以保持程序运行,通知用户他们输入了一个错误的输入,并再次问他们这个问题。任何帮助都将不胜感激。 这是我的代码

  • 我使用从我的mysql数据库添加节点到。 我的问题是记录中的某些列值可能为null。我如何在cypher查询中处理它们,因为对于mysql表中的null值,它没有创建任何节点。 下面是我使用neo4j java驱动程序创建节点的代码 在neo4j浏览器控制台中,当我在cypher下面运行查询时,没有形成任何节点。 更新:我能够在Java处理空值。但是对于另一张桌子,我有一些奇怪的行为。 在Neo4