热门标签 | 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,但错误详细信息为空。任何线索都非常感谢!





推荐阅读
  • 基于51单片机的多项目设计实现与优化
    本文探讨了基于51单片机的多个项目的设计与实现,包括PID控制算法的开关电源设计、八音电子琴仿真设计、智能抽奖系统控制设计及停车场车位管理系统设计。每个项目均采用先进的控制技术和算法,旨在提升系统的效率、稳定性和用户体验。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文详细介绍了如何在Vue项目中集成和配置XGPlayer视频插件,包括安装步骤、基本配置以及常见问题的解决方法。 ... [详细]
  • 前端技术分享——利用Canvas绘制鼠标轨迹
    作为一名前端开发者,我已经积累了Vue、React、正则表达式、算法以及小程序等方面的技能,但Canvas一直是我的盲区。因此,我在2018年为自己设定了一个新的学习目标:掌握Canvas,特别是如何使用它来创建CSS3难以实现的动态效果。 ... [详细]
  • 本文详细记录了在Mac操作系统中安装Hexo时遇到的权限错误,并提供了有效的解决方案。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
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社区 版权所有