带双引号的 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 准备语句的主要内容,如果未能解决你的问题,请参考以下文章

C#替换“/ with” - 带双引号和其他的双引号反弹

带双引号的 CSV 的无效引号格式(Redshift 加载)

在awk中搜索带双引号的字符串

带双引号的 RegExp 模式中的编译错误

从 Access 导出不带双引号的 CSV 文件

为laravel刀片输出带双引号的json