1

我正在尝试从带有撇号的 MySQL 记录中提取数据。它返回一个反斜杠,其余的字符串丢失。相信我,我已经搜索了互联网,到目前为止没有任何效果。我一定是太累了,它就在我面前。请参阅下面的代码...

$sql = "SELECT * FROM ".$tbl."  WHERE FIELD_NO = ".$order_no." ORDER BY LINE_NO ASC";
    $rs_result = $conn->query($sql); 

while($row = $rs_result->fetch_assoc()) {

$addl_info = mysqli_real_escape_string($conn, $row['ADDL_INFO']); //tried this

echo "<td class='col32'><input name='addl_info[]' class='addl_info' type='text' value='".$addl_info."'></td>";

mysql 存储的数据是“Band of 20's”,它输出为“Band of 20\”,缺少“s”。我尝试了我能想象的一切,但仍然无法使用 PHP 返回完整的数据字符串。我使用 mysqli_real_escape_string() 来获取带有撇号的数据,但现在我无法使用撇号及其后面的文本取回数据。

我计划使用这个特定的项目来转移到 PDO,但我现在需要修复,直到我可以做到这一点。我需要一些时间来学习和完成 PDO。

4

3 回答 3

4

您将值用单引号括起来,这不起作用:

value='Band of 20's'

看到问题了吗?浏览器如何知道哪个是起始报价,哪个是结束报价?

您需要将报价转换为它的 HTML 实体&#039;

echo "stuff value='".htmlentities($row['ADDL_INFO'], ENT_QUOTES)."' stuff";

或使用双引号(但您仍应转换 HTML 实体):

echo "stuff value=\"{$row['ADDL_INFO']}\" stuff";
//or
echo 'stuff value="'.$row['ADDL_INFO'].'" stuff';
于 2019-03-15T19:35:16.333 回答
-1

mysqli_real_escape_string()像您在此处那样在字符串上运行会转义某些字符:

$addl_info = mysqli_real_escape_string($conn, $row['ADDL_INFO']);

您只需要检索返回的值:

$addl_info = $row['ADDL_INFO'];

此外,出于安全原因(SQL 注入的风险),请确保通过准备好的语句运行您的查询。您可以在此处找到有关执行此操作的信息:http: //php.net/manual/en/mysqli.quickstart.prepared-statements.php

于 2019-03-15T19:39:41.760 回答
-2

从浏览器、PHP my Admin 或类似工具访问您的 SQL...当您看到您的表格和所有其他选项卡时,转到 SQL。它就像一个测试环境,您可以在其中尝试您的代码。有一些预设,如“Select * from table”等。在那里你可以看到撇号是如何写在你的 SQL 中的。我想它会帮助你

于 2019-03-15T19:45:08.663 回答