V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Plumes
V2EX  ›  PHP

PHP+mysql中文只能显示问号的问题

  •  
  •   Plumes · 2013-07-05 19:37:35 +08:00 · 6033 次点击
    这是一个创建于 3940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,中文只能显示问号,到网上搜了一下,答案都是各种设置字符集,但是设置之后依然不奏效,又到网上查了查,发现一篇文章提到使用 mysql_query("set names utf8"); 时不能使用 mysqli_ 的函数,只能使用 mysql_ 的函数,改了之后发现果然好了,但是如果非要使用 mysqli_该怎么办呢?
    18 条回复    1970-01-01 08:00:00 +08:00
    haiyang416
        1
    haiyang416  
       2013-07-05 19:41:56 +08:00 via Android
    这语句和crud 语句没什么区别,直接query就行。
    Plumes
        2
    Plumes  
    OP
       2013-07-05 19:47:25 +08:00
    好吧,我sb了,(〒ˍ〒),只要使用 mysqli_query("set names utf8"); 就好了
    vibbow
        3
    vibbow  
       2013-07-06 03:57:10 +08:00
    mysqli,推荐使用以下方法设置连接字符集
    mysqli::set_charset('utf8');

    PHP官方文档:
    http://www.php.net/manual/en/mysqli.set-charset.php
    jevonszmx
        4
    jevonszmx  
       2013-07-10 22:44:57 +08:00
    推荐用pdo啊~~
    vibbow
        5
    vibbow  
       2013-07-11 00:06:42 +08:00
    @jevonszmx PDO的意义是什么?一直没搞懂。
    horsley
        6
    horsley  
       2013-07-11 01:15:45 +08:00
    @vibbow 统一的数据访问接口,后端搭配的数据库可以换各种数据库
    vibbow
        7
    vibbow  
       2013-07-11 01:39:42 +08:00
    @horsley 谁无聊没事换数据库玩啊,尤其是各个数据库语法还可能不同的情况下。
    jevonszmx
        8
    jevonszmx  
       2013-07-15 17:34:19 +08:00
    @vibbow
    本身公司就存在多个数据库呢?
    保持统一、抽象的数据访问接口,比不同的数据库不同的语句好吧?听说php官方都准备直接用pdo,不太更新php_mysql之类的组件了
    性能暂时没感受到,就是有次负载过高时,pdo较好的稳定性(pdo的项目反映迟钝,mysql直连的挂了)

    @horsley
    bingo~
    vibbow
        9
    vibbow  
       2013-07-15 18:06:14 +08:00
    @jevonszmx 在有多个不同类型数据库的情况下,为了保持统一,抽象的数据访问接口,你肯定还得对PDO再封装一遍(要不然还是会遇到LIMIT 10, TOP 10之类的语法不一致问题),这时PDO的意义等于没有意义了。
    msg7086
        10
    msg7086  
       2013-07-15 18:36:32 +08:00
    @vibbow 这么做下去就会做成ORM了。所以一般情况下还不如直接固定在一个数据库上来得好,除非你真要考虑很特殊的情况……
    vibbow
        11
    vibbow  
       2013-07-15 18:47:48 +08:00
    @msg7086 是啊,所以一直没搞懂PDO存在的意义是什么?
    jevonszmx
        12
    jevonszmx  
       2013-07-16 15:15:22 +08:00
    @vibbow
    就和框架存在的意义一样啊,框架写的代码难道和直接写有区别吗?直接写一堆文件也能实现功能的啊。可是框架(普遍存在db操作封装,复杂的用orm,封装了太多操作,其实性能很差。。。汗一个),还不就是为了满足快速开发、不用面对不同底层实现嘛,这样菜鸟程序猿也不需要关注不同的数据库差异(虽然我也很反对,因为用了框架后原理都忘记了),用类的方式就完全可以无缝操作不同数据库了。
    php关于框架是否有意义,orm是否有意义,这个争了很多年了。。。
    vibbow
        13
    vibbow  
       2013-07-16 15:57:11 +08:00
    @jevonszmx 框架是可以满足快速开发,可是PDO没有啊...
    jevonszmx
        14
    jevonszmx  
       2013-07-16 17:27:36 +08:00
    @vibbow
    pdo也是封装了db操作方法啊:
    http://www.php.net/manual/zh/intro.pdo.php
    PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。

    当然,针对一些数据库的sql语句差异(top神马的。。。)还是需要做处理的,这个没法避免
    vibbow
        15
    vibbow  
       2013-07-16 19:04:05 +08:00
    @jevonszmx 所以为了跨数据库,还得二次封装...
    不跨数据库的话,用PDO和用mysqli没实际意义上的区别啊...
    jevonszmx
        16
    jevonszmx  
       2013-07-16 22:59:04 +08:00
    @vibbow
    基本上现在很少不用框架来开发程序了吧。。。写原生语句很累的。
    pdo预编译也是卖点之一啊~~虽然平时参数还是自己处理XD
    vibbow
        17
    vibbow  
       2013-07-16 23:00:43 +08:00
    @jevonszmx 就我个人来言:能不用框架就不用框架,除了少数的函数轻度封装一下(比如说curl),其他的全部自己处理
    jevonszmx
        18
    jevonszmx  
       2013-07-17 08:58:00 +08:00
    @vibbow
    额,个人,哥哥,公司开发人员水平不一,不搞个框架限制下,你就惨了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5273 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:35 · PVG 16:35 · LAX 01:35 · JFK 04:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.