2012-08-09 59 views
2

我正在使用PHP来填充公司记录的数据库。我有一个公司名称和他们使用的货币类型的字段。
但是,当我使用PHP的记录永远不会被插入,如果货币是Enlglish英镑符号(£)。美元符号($)或任何其他正常字符是没有问题的。当我运行sql语句并将其直接输入到MySQL查询浏览器中时,带有磅符号的记录插入得很好。但是,当我在PHP中运行完全相同的INSERT语句时,它不起作用。使用PHP无法获取要插入到mysql数据的记录

$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '£')"; 
$rs = mysql_query($sql, $conn); 
//Does not insert a record 

$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '$')"; 
$rs = mysql_query($sql, $conn); 
//A record inserts just fine 

//My MySQL version is 5.5.11. PHP is version 5.3.6. 
//The MySQL table looks like this: 
TABLE company_test 
FIELD | id  | INTEGER(10) | not null | auto increment 
FIELD | name  | VARCHAR(45) | not null 
FIELD | currency | VARCHAR(3) 

在MySQL查询浏览器的“表选项”选项卡中显示,该company_test表我的字符集是UTF8。

谢谢。

+0

什么是PHP脚本的字符集? ASCII或UTF8?你有没有从MySQL的任何警告?你有没有试过调用mysql_error()? – 2012-08-09 17:47:34

+1

它可能无助于回答你的问题,但你应该停止使用'mysql_ *'函数。他们正在被弃用。请使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不确定使用哪一个,[阅读这篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-09 17:48:55

+0

值得可能增加'currency'字段的大小吗?我不知道一个英镑符号会被存储为一个字符还是像'£'这样的字符,这不适合...... – andrewsi 2012-08-09 17:49:51

回答

1

检查错误:

$rs = mysql_query($sql, $conn) or die(mysql_error()); 
           ^^^^^^^^^^^^^^^^^^^^^ 

永远不要假设一个查询成功。即使你的sql语法是完美的,还有太多的其他原因导致不检查。

-1

你为什么不首先将其转换为ヶ辆或htmlspecialchar:

$currency = htmlspecialchars('£'); 
$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '{$currency}')"; 

此外,什么类型的数据类型是你的货币字段?

+0

我增加了curreny字段的varchar大小为10.这没有奏效。货币字段是数据类型utf8。我只输出mysql_error的价值,并得到这个 - > 1366:不正确的字符串值:在行“\ XA3”列“货币” 1' – Thread7 2012-08-09 17:57:00

+0

是htmlspecialchars' ** **无处接近这个逃逸的SQL。请使用适当的方法。 – tadman 2012-08-09 18:00:31

+0

是的,我试过了raygo的htmlspaecialchars功能并收到了同样的错误。 – Thread7 2012-08-09 18:07:06

1

经过一番谷歌搜索后,我终于找到了一些工作。类似的人可能会创建一个PHP函数来转换sql语句的字符集。
现在我的查询看起来像这样插入之前: INSERT INTO company_test(name,currency)VALUES('ABC Widgets','£') 请注意磅符号前的有趣小字。

反正这里的功能:

function TtoUtf8(&$string, $encType = 'ISO-8859-1') 
{ 
    $enc = mb_detect_encoding($string); 
    $enc ? 
     $enc = $enc : 
     $enc = $encType; 
    if ($enc == 'UTF-8') 
    { 
     return $string; 

     // end if $enc == UTF-8 
    } else 
    { 
     $conv = iconv($enc, 'UTF-8//TRANSLIT', $string); 
     $conv ? 
      $ret = &$conv : 
      $ret = &$string; 
     return $ret; 
    } 

}

+0

谢谢..为我工作 – Parag 2014-02-24 05:23:58

相关问题