mysql_query没有正确插入行

时间:2012-04-20 18:18:32

标签: php mysql database

我有这个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)

任何想法有什么不对?

4 个答案:

答案 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中缺少的字符不是真的丢失但是由于编码而被隐藏)但是错误是在其他文件中。

谢谢大家的时间。 我希望这将有助于将来。