我有这个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和内容whitch应作为php输出返回普通/文本
当我通过phpmyadmin将其插入db时,一切正常。
peer_id的数据类型为varchar(255)
任何想法有什么不对?
答案 0 :(得分:1)
您应该以安全的方式将变量传递给查询。修改脚本和查询,以便传递变量转义。 E.g:
$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 prepared statements to store html content。
答案 1 :(得分:0)
我相信MySQL不允许使用特殊字符
答案 2 :(得分:0)
也许可以使用utf8_decode()
答案 3 :(得分:-1)
好的,我发现了错误。当我比较数据库中插入的数据和来自$ 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 NOT utf8-general-ci !!
所以,编码没有错误(因为我写的问题,phpmyadmin中缺少的字符不是真的丢失但是由于编码而被隐藏)但是错误是在其他文件中。
谢谢大家的时间。 我希望这将有助于将来。