【发布时间】: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 statements 与parameter binding 一起使用。这些技术可以通过
mysqli和PDO完成。 -
是的,您不需要
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