1

我有这个 SQL:

INSERT INTO v3_peers 
                    (torrent, peer_id, ip, ipv6, port, smoke_ip, uploaded, downloaded, up_ofset, down_ofset, remaining, started, last_action, connectable, userid, agent) 
                    VALUES 
                    ('13471', '-UT2200-ĂZŤjśŻl‰şđ^', '69.64.147.243', '2001:0:5ef5:79fd:14e6:7214:2a5f:5811', '58262', '', '0', '0', '0', '0', '0', '1334945327', '1334945327', 'yes', '1', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19')

当它在脚本中执行时,它被保存到 db,但 peer_id 只是“-UT2200-”,浏览器给我对话框来保存文件,名称为 sript,内容应该以纯文本/文本的 php 输出形式返回

当我通过 phpmyadmin 将其插入数据库时​​,一切正常。

peer_id 具有数据类型 varchar(255)

有什么想法有什么问题吗?

4

4 回答 4

1

您应该以安全的方式将变量传递到查询中。重新编写脚本和查询,以便通过转义变量传递。例如:

$peer_id = mysql_real_escape_string('-UT2200-ĂZŤjśŻl‰şđ^');
$query = 'INSERT INTO `v3_peers` (`peer_id`) VALUES ("' . $peer_id . '")';
$result = mysql_query($query);

这样可以确保变量不会影响查询结构。

此外,正如@tereško 提到的,尝试 PDO。您的查询看起来会被频繁使用,因此 PDO 及其准备好的语句可能会派上用场。我最近向某人解释过:PDO 准备语句来存储 html 内容

于 2012-04-20T18:37:02.503 回答
0

我相信 MySQL 不允许特殊字符

于 2012-04-20T18:21:05.243 回答
0

也许尝试一下utf8_decode()

于 2012-04-20T18:28:56.853 回答
-1

好的,我发现了错误。当我比较插入到数据库中的数据和来自 SQL 中 $peer_id=$_GET[peer_id] 变量的实际数据时,例如:

WHERE peer_id LIKE '".$peer_id."'

然后我收到错误,因为 db 中的 peer_id 不像 peer_id,但是当我使用

WHERE peer_id = '".$peer_id."'

它完美地工作。列 peer_id 的编码必须设置为 utf8-unicode-ci 而不是 utf8-general-ci!!

因此,编码没有错误(我在问题中所写的 phpmyadmin 中缺少的字符并不是真正丢失,而是由于编码而隐藏)但错误在其他脚本中。

谢谢大家的时间。我希望这对将来的人有所帮助。

于 2012-04-23T16:47:34.853 回答