热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqli::set_charset()返回false后,mysqli::$error变量为空

我正在尝试在docker容器(运行Ubuntu18.04)中设置

我正在尝试在docker容器(运行Ubuntu 18.04)中设置Question2Answer。我能够将其连接到我的数据库(最初是空的),但是随后遇到了安装问题。首先,如果我只是访问基本URL,则会得到以下信息:


  

您的Question2Answer数据库已正确检查。

  
  

[转到管理中心]

有效地单击链接无济于事,因为我再次获得了同一页面的服务。是时候卷起袖子去潜水了。

探索了一段时间后,我尝试手动访问以下URL,确定在安装过程中此点应自动被调用:

/index.php?qa=install

然后这给了我


  

数据库set_charset错误

表面上看似乎不是很有帮助,但是到目前为止归结为,对qa_db_connect()内部的mysqli :: set_charset()的调用返回false,而mysqli :: $ errno和mysqli却返回: :$ error之后都为空。这是qa_db_connect()的摘录(摘自qa-include / qa-db.php中的80行):

// in mysqli we connect and select database in constructor
if ($port !== null)
$db = new mysqli($host,QA_FINAL_MYSQL_username,QA_FINAL_MYSQL_PASSWORD,QA_FINAL_MYSQL_DATABASE,$port);
else
$db = new mysqli($host,QA_FINAL_MYSQL_DATABASE);
// must use procedural `mysqli_connect_error` here prior to 5.2.9
$conn_error = mysqli_connect_error();
if ($conn_error)
qa_db_fail_error('connect',$db->connect_errno,$conn_error);
// From Q2A 1.5,we explicitly set the character encoding of the MySQL connection,instead of using lots of "SELECT BINARY col"-style queries.
// Testing showed that overhead is minimal,so this seems worth trading off against the benefit of more straightforward queries,especially
// for plugin developers.
if (!$db->set_charset('utf8'))
qa_db_fail_error('set_charset',$db->errno,$db->error);

这里是qa_db_fail_error()方法,它说明了传入的errno和错误值为空的事实(基于上面的微薄输出):

function qa_db_fail_error($type,$errno = null,$error = null,$query = null)
{
if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__,$args); }
global $qa_db_fail_handler;
@error_log('PHP Question2Answer MySQL ' . $type . ' error ' . $errno . ': ' . $error . (isset($query) ? (' - Query: ' . $query) : ''));
if (function_exists($qa_db_fail_handler))
$qa_db_fail_handler($type,$errno,$error,$query);
else {
echo sprintf(
'


Database %s

%s

%s
',htmlspecialchars($type . ' error ' . $errno),nl2br(htmlspecialchars($error)),nl2br(htmlspecialchars($query))
);
qa_exit('error');
}
}

不幸的是,搜索该问题到目前为止没有发现任何帮助。如果我尝试在开发服务器上(顺便说一下,在Joomla子目录中)设置Q2A,则不会遇到这些问题,并出现页面提示我设置数据库。

据我所知,我的docker容器配置正确。我正在使用Apache,PHP-FPM(7.3)并安装了以下php扩展名:

ii php-common 2:70+ubuntu18.04.1+deb.sury.org+6 all Common files for PHP packages
ii php7.3 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 all server-side,HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 documentation,examples and common module for PHP
ii php7.3-curl 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 CURL module for PHP
ii php7.3-fpm 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 server-side,HTML-embedded scripting language (FPM-CGI binary)
ii php7.3-gd 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 GD module for PHP
ii php7.3-intl 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Internationalisation module for PHP
ii php7.3-json 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 JSON module for PHP
ii php7.3-mbstring 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 MBSTRING module for PHP
ii php7.3-mysql 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 MySQL module for PHP
ii php7.3-opcache 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 readline module for PHP
ii php7.3-xml 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 DOM,SimpleXML,WDDX,XML,and XSL module for PHP
ii php7.3-zip 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Zip module for PHP

最后,出于好奇,我尝试忽略set_charset的错误返回并允许代码继续进行。进行此更改后,我在执行的第一个SQL查询上会收到类似的错误:


  

数据库查询错误

  
  

选择标题,内容来自qa_options

同样,调用查询返回false,但错误详细信息为空。任何线索都非常感谢!





推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
author-avatar
没有结局的相遇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有