带双引号的 PHP/SQL 准备语句
Posted
技术标签:
【中文标题】带双引号的 PHP/SQL 准备语句【英文标题】:PHP/SQL prepared statement with double quotes 【发布时间】:2016-09-29 15:59:21 【问题描述】:我正在使用 html 输入元素来接受来自用户的数据并将其保存在 mysql 数据库中。为此,我使用 php 和 mysqli 创建一个准备好的语句。
在我尝试接受包含双引号(“)的输入字符串之前,这非常有效。如果输入字符串包含双引号,则保存的数据将是直到双引号字符的字符串。
例如:
我看到一个 7'9" 的人。
将保存为:
我看到了 7'9
我搜索了高低,但找不到解决方案。我试过 mysqli_real_escape_string,但这只是添加反斜杠来转义有意义的字符。当与准备好的语句结合使用时,反斜杠按字面意思解释,双引号仍然会中断字符串。 所以我的例子是:
我看到一个 7\'9
我什至认为 PHP 可能没有从输入元素中获取整个字符串,但是当我回显元素的值时,我确实看到了整个字符串。
这是一些示例代码。我删除了一些业务细节,但这通常是我想要做的。
$sqlSave = $objConnection->prepare('update tbl set Answer=? where ID=?;');
$sqlSave->bind_param("si", $sqlAnswer, $sqlID);
$sqlSave->execute();
我觉得我遗漏了一些明显的东西,所以请原谅我的无知。感谢您提供任何帮助或其他信息。
【问题讨论】:
你的专栏的长度是多少?双引号不应该对您显示的代码有问题。 列是 VARCHAR(200)。 数据库在双引号处被截断了,还是在浏览器中查看被截断了?如果您在input
之类的元素中输出,则双引号将关闭 value
属性。
感谢您的帮助。
【参考方案1】:
是的,确实这是非常明显的事情。只要看看生成的HTML代码,你就会立刻得到一个线索。
然后牢记HTML属性必须始终使用htmlspecialchars()
进行编码
【讨论】:
谢谢!它已正确保存在 SQL 中,但在我分配值时在输入元素中被切断。 htmlspecialchars() 非常好用!【参考方案2】:我错了。 PHP 正确保存数据。数据在 HTML 输入元素中显示时被截断。
使用 htmlspecialchars() 将 " 转换为 "
并显示所有内容。
感谢大家帮我解决这个问题。
【讨论】:
以上是关于带双引号的 PHP/SQL 准备语句的主要内容,如果未能解决你的问题,请参考以下文章