【问题标题】:raquo symbol finishing string in mysql insertraquo符号在mysql插入中完成字符串
【发布时间】:2015-11-15 14:10:32
【问题描述】:

我目前正在尝试编写 MySQL 数据库导出/导入功能。它检索数据库并将其保存为服务器上的 .sql 文件。当我尝试重新上传数据库时,如果存在包含符号 » 或 « 的字符串,它会在此处停止字符串。

另外一个问题是包含这些符号的一些数据位于序列化数组中,因此进行查找和替换可能最终会弄乱数组。 (这方面的任何提示也很棒)

我想知道有什么简单的方法可以解决这个问题。

这是我的导入代码...

<?php
ini_set('display_errors',1);
$path = $_SERVER['DOCUMENT_ROOT'].'/database-dump-test/';
$sql_filename = 'db.sql';
$sql_contents = file_get_contents($path.$sql_filename);

$sql_contents = explode('/*endofquery*/',$sql_contents);



$server = 'localhost';
$username = 'u';
$password = 'password';
$name = 'db';

$mysqli = new mysqli($server, $username, $password, $name);

foreach($sql_contents as $query){

       $result = $mysqli->query($query);


       if (!$result)

            echo $mysqli->error  . "\n <br><br>";

}
?>

发生的情况是包含“This is » a test”的字符串只会导入“This is”

我试过逃跑,但什么也没做。

我相信很多其他角色也会发生这种情况。

编辑:我认为欧元符号很好,但似乎不是,所以我删除了那部分。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您必须在 export(!) 处转义某些字符串值。使用 mysqli::real_escape_string()。看这个例子:

    $string = "This is » a test";
    $escaped  = $mysqli->real_escape_string($string);
    
    $mysqli->query("INSERT into myTable (myColumn) VALUES ('$escaped')"));
    

    完整的文档可以在http://php.net/manual/de/mysqli.real-escape-string.php找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 2010-10-17
      • 2013-11-12
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2011-04-19
      • 2012-10-22
      相关资源
      最近更新 更多