为什么双引号在mysql查询中消失?

时间:2016-01-28 14:21:28

标签: php mysql

我有这段代码:

<?php
   $conn = mysqli_connect("localhost", $db['username'], $db['password'], "the_table");

   // Check connection
   if (!$conn) {
       die("Connection failed: " . mysqli_connect_error());
   }

   $sql = "SELECT * FROM xlsws_images";

   if(!$result = $conn->query($sql)){
       die('There was an error running the query [' . $db->error . ']');
   }

   while($row = $result->fetch_assoc()){
       $path = $row['image_path'];
       echo $path;
   }
?>

它按预期工作,直到它到达一行image_path,其中包含双引号,例如product/1/1”-wood-wheel-casters-set-of-4.png。 在这种情况下,它返回没有双引号的路径,如product/1/1-wood-wheel-casters-set-of-4.png

是什么让这些引号消失,我该如何避免?

1 个答案:

答案 0 :(得分:6)

“......其中有双引号,例如product / 1/1”“

这是一个卷曲(智能)引用,应该更改为"。 (如果您在问题中向我们展示的是数据库中实际的引号类型)。

这就是为什么它失败了,从一开始就被引入你的数据库。

您可以使用REPLACE

在表格中更改它们。 (甚至删除它们)。

理想情况下,你应该在它到达db之前解决这个问题。

修改

以下测试期间,echo'd product/1/1”-wood-wheel-casters-set-of-4.png

$result = $connection->query("SELECT * FROM table");

while($row = $result->fetch_object()){

   echo $row->path_column;

}

因此,很难说是导致代码失败的原因。

您可以尝试的一些事情是:

$path = mysqli_real_escape_string($conn, $row['image_path']);

$path = htmlentities(stripslashes($row['image_path']));

使用示例 str_replace()

$str = "product/1/1”-wood-wheel-casters-set-of-4.png";

echo $newstring = str_replace("”", "", $str);

哪个产生了:

product/1/1-wood-wheel-casters-set-of-4.png

  • 如果您希望在文件上传方面走这条路线。

请参阅堆栈上的以下问答,以在上传文件期间替换字符(重命名):

旁注:这意味着用下划线替换空格,但你可以基于同样的逻辑。

还有一些可能有用的例子。

这摆脱了引用:

$result = $conn->query("SELECT * FROM table");

while($row = $result->fetch_object()){

    $new = $row->path_column;
    $newstring = str_replace("”", "", $new);

}

echo $newstring;

并将新更改的卷曲引号转换为常规引号:

$result = $conn->query("SELECT * FROM table");

while($row = $result->fetch_object()){

    $new = $row->path_column;
    $newstring = str_replace("”", "\"", $new);

}

echo $newstring;

哪一个产生product/1/1"-wood-wheel-casters-set-of-4.png

  • 请注意"而不是智能引用

修改

事实证明,这是在设置连接之前传递UTF-8的问题。

OP:“太棒了!$conn->set_charset('utf8mb4');工作。这就是我需要添加到上面的代码中。现在无缝地工作。谢谢! - Joshua Goossen”

根据我对OP的评论:

“你也可以在查询之前尝试设置为UTF-8作为你的连接。看看堆栈上的这个Q&amp; A UTF-8 all the way through那里有几个答案。连接是{ {1}}作为示例,在打开数据库连接之前使用。“