2013-04-23 22 views
1

我有一个很大的问题PHP错误插入文件的字节码在MySQL

,当我试图把查询字符串以下错误出现

不正确的字符串值的文件:“\ XE6 \ X00 \ X00 \ xfd的\ xfd的\ xfd的......”

INSERT INTO `web_plugins` (`nome`, `xmllocal_nome`, `icone_url`, `icone_bytecode`, `swf_url`, `swf_bytecode`) VALUES ('asdfasdf', 'wqwerrwe', '/assets/uploads/plugins_icons/f2d2d3d9.gif', 'GIF89a\0\0�\0\0������������������������������������������������������������������������������������������������������������������������������~~~}}}|||{{{zzzyyywwwvvvuuutttsssrrrqqqpppooonnnmmmjjjfffdddbbb```___]]]\\\\\\[email protected]@@888���\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!�\0\0Q\0,\0\0\0\0\0\0\0��\'KP?BI2/?\02G&-*8\'+;\rNL:!.\"%)\"\'&\'-=B!1)$(%&$�1H;+\',-(&%%#�!4\Z\'))�Ժ(##!94)*$#�\'*&# \"#-/\'\"��$! <>!$!!\"HP���2>���_��p���c��,�H����6F�:�Qr+4�0aF�b�L�8�� \n���b&�]�Ø�I� 
+0

列'swf_bytecode'是什么类型?你使用什么字符集? (我建议UTF-8。) – showdev 2013-04-23 18:21:51

+0

@showdev编码应该是不相关的,'swf_bytecode'应该是一个真正的'BLOB'。 – bwoebi 2013-04-23 18:22:33

+0

不是swf_bytecode,是icone_bytecode,我已经使用UTF-8 – 2013-04-23 18:23:07

回答

1

您应该保存GIF在BLOB列。

想象一下如下表:

CREATE TABLE testblob(
    id INT AUTO_INCREMENT , 
    data MEDIUMBLOB, 
    PRIMARY KEY (id) 
) ENGINE = InnoDB; 

然后你可以用以下的INSERT代码:

<?php 
    $dbh = mysql_connect("localhost", "user"); 
    mysql_select_db("test"); 
    $data = file_get_contents("your.gif"); 
    // This is important to avoid a ' to accidentally close a string 
    $data = mysql_real_escape_string($data); 
    mysql_query("INSERT INTO testblob(data) VALUES ('$data')"); 
?> 

注意,这是从article取自网络。感谢作者。

此外您应该注意,mysql_ *扩展名已被标记为废弃。您应该使用PDO或mysqli扩展。我个人更喜欢PDO。下面是一个使用PDO的示例:

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

// create a prepared statement 
$stmt = $conn->prepare('INSERT INTO `testblob` (`data`) VALUES (:data)');  
// assign the blob value to it 
$stmt->bindParam(1, file_get_contents('your.gif'), PDO::PARAM_LOB); 

// execute the statemt 
$stmt->execute(); 
+0

THAAAAAAAAAAAANKS非常多!!!! – 2013-04-23 18:29:05

+0

呵呵:)不客气 – hek2mgl 2013-04-23 18:29:35