问题遇到的现象和发生背景 安装pdo 下载的是 wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 然后解压 进入目录 phpize 紧接着 运行了 ./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql 然后 运行 ln -s /usr/local/mysql/include/* /usr/local/include/ 最后 make
运行结果及报错内容 报错 In file included from /usr/local/PDO_MYSQL-1.0.2/pdo_mysql.c:31: /usr/local/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:75:90: error: expected ‘;’, ‘,’ or ‘’ before ‘TSRMLS_DC’ ysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC); 请求大佬帮助
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到您描述的问题,主要是因为在编译PDO_MYSQL扩展时,TSRMLS_DC宏的使用与您的PHP环境不匹配导致的编译错误。为了解决这个问题,请按照以下步骤操作:
问题分析:
php_pdo_mysql_int.h
文件中的某一行代码对TSRMLS_DC宏的使用不符合预期。解决方案:
检查PHP版本与线程安全性: 首先,确认您的PHP安装是否为线程安全(TS)版本。非线程安全(NTS)版本不需要TSRMLS_*宏。可以通过运行php -i | grep "Thread Safety"
来查看。
调整编译参数: 如果是NTS版本,尝试从编译参数中移除所有与TSRMLS相关的部分。如果必须使用TS版本且遇到宏定义问题,可能需要手动调整源代码或寻找与您PHP版本兼容的PDO_MYSQL扩展版本。
重新编译: 假设您已确定正确的编译方向,回到解压后的PDO_MYSQL扩展目录,根据PHP版本特性调整./configure
命令。对于NTS版本,可能无需任何关于TSRMLS的参数。修改后重新执行以下步骤:
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
make clean # 清理之前的编译结果,确保无遗留问题
make
如果是TS版本且需调整宏定义,请直接编辑报错提及的源文件,如php_pdo_mysql_int.h
,确保TSRMLS_DC等宏的正确使用,再进行编译。
注意事项:
验证与测试:
make
命令执行完毕后是否有错误提示,确保没有错误信息输出。php.ini
中添加相应extension指令启用它。重启PHP服务后,通过php -m
检查是否列出了pdo_mysql,以及通过编写简单的PHP脚本测试数据库连接功能。通过上述步骤,您应该能够解决编译PDO_MYSQL扩展时遇到的TSRMLS_DC相关错误。如果问题仍然存在,考虑检查PHP的详细版本信息及编译配置,或者寻求更专业的社区支持。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。