Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

henry

用的是lavarel框架,在框架基础上使用workerman,接受和发送都是正常的,就是在OnworkerStart函数中连接数据库的时候报错  Undefined class constant 'MYSQL_ATTR_INIT_COMMAND';
 
引用的是在网上下载的Connection.php文件

2537 1 0
1个回答

blogdaren

/path/to/php -m | grep pdo   检查下你的 pdo扩展 以及pdo_mysql 扩展 

  • henry 2018-12-29

    如下是PHPinfo的信息:

    PDO support enabled
    PDO drivers sqlite, mysql, pgsql

    pdo_mysql
    PDO Driver for MySQL enabled
    Client API version mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
    Directive Local Value Master Value
    pdo_mysql.default_socket no value no value

  • blogdaren 2018-12-29

    这贴的是网页的 phpinfo信息 ? workerman是基于PHP-CLI开发的, 和网页环境的PHP不是一码事,让你使用 php -m | grep pdo 检查呢, 不是看phpinfo。

  • henry 2018-12-29

    /var/www# php -m | grep pdo
    pdo_mysql
    pdo_pgsql
    pdo_sqlite

    这样是没有pdo就不行?有pdo_mysql

  • henry 2018-12-29

    我这个是在docker容器里显示的信息,能否加个qq沟通下?

  • henry 2018-12-29

    Build complete.
    Don't forget to run 'make test'.

    Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/
    Installing header files: /usr/local/include/php/
    Installing PDO headers: /usr/local/include/php/ext/pdo/

    warning: pdo (pdo.so) is already loaded!

    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp.la modules/ libs/
    /var/www# php -m | grep pdo
    pdo_mysql
    pdo_pgsql
    pdo_sqlite

    我安装了下,以上是要 让我执行 make test? 为啥是test??

  • blogdaren 2018-12-29

    php -m | grep -i pdo 看看显示的什么?

  • henry 2018-12-29

    /var/www# php -m | grep -i pdo
    PDO
    pdo_mysql
    pdo_pgsql
    pdo_sqlite

  • blogdaren 2018-12-29

    这说明 pdo扩展 以及pdo_mysql 扩展 已经安装OK

  • henry 2018-12-29

    那还有其他原因吗,一直说找不到在PDO.php中的常量

  • henry 2018-12-29

    我环境如下:
    ubuntu系统下安装了docker容器,在docker容器里安装了mysql,php-fpm,nginx等,容器外有个项目(lavarel框架,workerman),然后启动这个workerman,会不会是因为这个workerman不是用的容器里php-fpm?应该也不会呀,如果不是用的容器里的php-fpm,这个workerman也跑不起来吧?

  • blogdaren 2018-12-29

    1、PHP有多种运作方式,其中包括:PHP-CLI 和 PHP-FPM,这两者不是一码事。
    2、workerman是基于PHP-CLI开发运行的,PHP-FPM则是作为WEB服务器的扩展模块运作的的。
    3、其他可能的原因,stackoverflow里写的比较详细,你仔细参考下:
    https://stackoverflow.com/questions/2424343/undefined-class-constant-mysql-attr-init-command-with-pdo
    4、另外PHP5.3有BUG, 详见官方说明:
    https://bugs.php.net/bug.php?id=47224

  • 喵了个咪 2018-12-29

    装错地方了吧,在容器外用得在容器外装pdo pdo_mysql两个扩展啊。docker里装有什么用

  • henry 2018-12-29

    workerman用不到容器里的php-fpm?是这样的吗?我的web服务都是用的容器里的php-fpm并能正常运行

  • blogdaren 2018-12-29

    @5212:用不到,而且说了好几次呢: PHP-CLI 和 PHP-FPM 这两者不是一码事。

  • henry 2018-12-29

    我在容器外执行如下:
    ubuntu@VM-0-5-ubuntu:~$ php -m |grep -i pdo
    PDO

  • blogdaren 2018-12-29

    @5212: 那不是明显缺少 pdo_mysql 扩展么

  • henry 2018-12-29

    这方面确实不懂,那我workerman为啥能启动呢,不需要php支持吗?容器外没有安装php呀

  • blogdaren 2018-12-29

    @5212: 容器外没装PHP? 那不是你上面说的在容器外执行的PHP?

  • henry 2018-12-29

    之前只有在docker容器里安装,应该是容器里的php映射到容器外了

年代过于久远,无法发表回答
🔝