【问题标题】:How to get all data from MySQL with apostrophe in it using PHP如何使用 PHP 从 MySQL 中获取所有带有撇号的数据
【发布时间】:2019-03-15 19:27:21
【问题描述】:

我正在尝试从带有撇号的 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。

【问题讨论】:

  • 您的代码可能对SQL injection完全开放。不要通过将字符串粘在一起来构建查询。相反,将prepared statementsparameter binding 一起使用。这些技术可以通过mysqliPDO 完成。
  • 是的,您不需要mysqli_real_escape_string() 查询结果。该添加被削减并转义字符。而是只返回值$row['ADDL_INFO']。数据清理需要在上面的查询部分进行。查看php.net/manual/en/mysqli.quickstart.prepared-statements.php 了解更多信息。
  • 是的,我同意,这不在互联网上,它仅在本地网络上。但这就是为什么我想将其转移到 PDO 以作为未来的最佳实践。
  • @Chris - 是的,我可以在 phpAdmin 中清楚地看到它。
  • @Chris 他在结果而不是查询上运行mysqli_real_escape_string()。这就是问题所在。

标签: php mysqli mysql-escape-string


【解决方案1】:

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

value='Band of 20's'

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

你需要将引用转换成它的 HTML 实体&amp;#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';

【讨论】:

    【解决方案2】:

    像您在此处所做的那样在字符串上运行 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

    【讨论】:

    • 那是我一开始所拥有的,它给了我“Band 20”
    【解决方案3】:

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

    【讨论】:

    • 感谢您的提示,托马斯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2016-08-17
    相关资源
    最近更新 更多