Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP ()不起作用,但array_push不起作用,只是没有SQL子句

PHP ()不起作用,但array_push不起作用,只是没有SQL子句
EN

Stack Overflow用户
提问于 2016-05-11 06:39:07
回答 2查看 374关注 0票数 0

因此,我在使用SQL子句和PHP命令时遇到了一个非常奇怪的问题。由于某些原因,我的代码在使用命令"SELECT * FROM tableName WHERE columnName=text";时运行良好,但在使用"SELECT * FROM tableName";时不工作--我已经将该命令直接放入MySQL中,并返回结果。如果我对行数组进行内爆,就会得到结果,如果我从使用array_push($result...)切换到$result= [],我将得到最后一个JSON格式的条目,就像预期的那样。我不知道为什么会有这种行为,我认为这段代码适用于以前版本的PHP,或者可能是较旧版本的MySQL。我最近做了一些更新,现在一切都是最新的版本。搜索发现那些同时具有array_push和array[]的人不能工作,或者命令不能使用where子句,但我的问题正好相反。不确定会是什么,我启用了PHP错误报告和SQL错误报告,当问题发生时,我只得到PHP白屏幕。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
error_reporting(-1);
define('HOST','localhost');
define('USER','dbuser');
define('PASS','dbpassword');
define('DB','dbname');

$eventYear = isset($_GET["year"]) ? $_GET["year"] : '';
$eventYear = addslashes($eventYear);
if (empty($_GET["year"])){
$eventYear = 2016;
}

$con = mysqli_connect(HOST,USER,PASS,DB) or die ("Database Connection Failed");

$sql = "SELECT * FROM tableName";

$res = mysqli_query($con,$sql);

if (!$res) {
printf("Error: %s\n", mysqli_error($con));
exit();
}

$result = array();

while($row = mysqli_fetch_array($res)){
array_push($result,
array('teamNumberLabel'=>'Team Number',
'teamNumber'=>$row["teamNumber"],
'teamEventLabel'=>'Team Event Name',
'teamEvent'=>$row["teamEvent"],
'teamDistrictCodeLabel'=>'District Code: ',
'teamDistrictCode'=>$row["teamDistrictCode"],
'teamCityLabel'=>'City: ',
'teamCity'=>$row["teamCity"],
'teamStateProvLabel'=>'State/Province: ',
'teamStateProv'=>$row["teamStateProv"],
'teamCountryLabel'=>'Country: ',
'teamCountry'=>$row["teamCountry"],
'teamNameFullLabel'=>'Sponsors: ',
'teamNameFull'=>$row["teamNameFull"],
'teamNameShortLabel'=>'Nickname: ',
'teamNameShort'=>$row["teamNameShort"],
'teamRobotNameLabel'=>'Name: ',
'teamRobotName'=>$row["teamName"],
'teamRookieYearLabel'=>'Rookie Year: ',
'teamRookieYear'=>$row["teamRookieYear"],
'teamWebsiteLabel'=>'Website: ',
'teamWebsite'=>$row["teamWebsite"]
));
}
header('Content-Type: application/json');
echo json_encode(array("result" => $result));

mysqli_close($con);

?> 

我有很多具有类似代码的其他文件,但是它们都包含SQL命令中的WHERE子句,所以所有这些都按预期工作。如果没有where子句,问题就不存在了。我试过将引号放在表名周围,但它显示了不正确的SQL语法,所以不是这样的。还阅读了SQL命令和array_push,我似乎无法理解。

更新:正如马歇尔所说的那样,我认为现在的问题是UTF-8中没有的数据,这会导致编码失败而不显示任何数据。这个表有数百个条目,所以在编码之前,我要过滤掉非UTF-8字符,看看它是否有效。

更新2:发现了这个问题。我有另一个脚本,它在单个事件的团队列表中运行(这个脚本类似,但返回了整个一年的所有团队),我遍历了这个列表,直到它失败了类似于这个事件。非UTF-8字符的加拿大事件是导致脚本失败的原因。Montréal在数据库中显示为Montr C.al,在魁北克显示为魁北克。代码运行得更早,只是因为最初测试代码时不存在此事件,而且该事件是一个不受支持的字符。这也解释了为什么代码与WHERE子句和array[]函数一起工作,因为在这两种情况下它都不会触及格式错误的数据。正确地过滤进来的数据,就像我本来不应该造成的那样,但至少现在我知道了原因,因为代码看起来是正确的,SQL命令也是正确的,所以我真的被困在了这个原因上。谢谢大家的帮助。

更新3:,好的,这是完整的修复。我将PHPMyAdmin中的所有内容修改为utf8mb4_unicode_ci排序规则和utf8mb4字符集。然后修改从API获取数据并将其输入数据库的脚本。我使用PDO连接到db,所以我将字符集添加到PDO条目中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$dbh = new PDO("mysql:host=localhost;dbname=dbname;charset=utf8mb4", 'username', 'password');

这使数据正确地进入数据库,但是JSON解析器仍然无法工作。发现我还需要明确告诉它在UTF-8MB4字符集中工作。添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$con->set_charset("utf8mb4");

到SQL查询之前的PHP脚本。现在,正确的字符将通过数据进入数据库的位置和请求的时间。所以问题是,当数据通过时,脚本没有被设置为UTF-8。希望这能帮助有类似问题的人。

EN

回答 2

Stack Overflow用户

发布于 2016-05-11 06:57:03

为什么不让MySQL来处理所有的数据操作呢。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$sql = "SELECT 
    'Team Number' as teamNumberLabel, 
    teamNumber,
    'Team Event Name' as teamEventLabel,
    teamEvent,
    'District Code: ' as teamDistrictCodeLabel,
    teamDistrictCode,
    'City: ' as teamCityLabel,
    teamCity,
    'State/Province: ' as teamStateProvLabel,
    teamStateProv,
    'Country: ' as teamCountryLabel,
    teamCountry,
    'Sponsors: ' as teamNameFullLabel,
    teamNameFull,
    'Nickname: ' as teamNameFull,
    teamNameShort,
    'Name: ' as teamRobotNameLabel,
    teamName as teamRobotName,
    'Rookie Year: ' as teamRookieYearLabel,
    teamRookieYear,
    'Website: ' as teamWebsiteLabel,
    teamWebsite
FROM tableName";

$res = mysqli_query($con,$sql);
$result = mysqli_fetch_all($res, MYSQLI_ASSOC);

print_r($result);

使用mysqli_fetch_all()一次获得所有结果并跳过循环。

如果不能使用mysqli_fetch_all(),请参阅这里,然后执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Use the query from above
$res = mysqli_query($con,$sql);
$result = array();
while($r = mysqli_fetch_assoc($res, MYSQLI_ASSOC)) array_push($result, $r);
票数 1
EN

Stack Overflow用户

发布于 2016-05-11 06:52:39

确保$rowarray_push函数中包含所有必需的索引。您应该验证$row

来自数组手册:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Note: This function sets NULL fields to the PHP NULL value.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37165955

复制
相关文章
maven pom文件配置加载lib下的jar包
项目需要引用第三方放在lib的jar,所以需要进行配置,不过最好还是放在公司自己的maven私服里
SmileNicky
2022/05/07
1K0
maven加载lib下的jar包
           <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>3.7.0</version>                 <configuration>                     <source>1.8</source>
似水的流年
2019/12/07
1.2K0
maven工具引入lib下的jar文件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable><!-- 直接运行,注册服务 -->
JQ实验室
2022/02/10
6770
maven依赖json-lib的jar包导入失败
maven仓库中配置了中央仓库http://central.maven.org/maven2/的镜像,但是json-lib包还是引入失败:
青山师
2023/05/05
7520
maven打包出来的jar包引入的其他jar包版本不是pom文件配置的版本
        项目上使用flyway来管理数据库版本,但是遇到了一件奇怪的事,这件事发生的时间点是springboot从2.3.12升级到2.6.7版本,升级后到底发生了什么,到底是谁引入了flyway 8.0.5版本呢,博主在pom中显示引入的flyway版本为7.1.1,在这个公共jar包里面执行mvn dependency:tree看到的flyway版本也是7.1.1,为什么这个公共jar包被其他项目引入后执行mvn dependency:tree却显示 flyway的版本为8.0.5,而且显示也是由这个公共jar包引入的。
johnhuster的分享
2023/10/16
3260
解决:打包SpringBoot项目成jar包后,其他的项目无法引入jar包中的对象
需求描述 因为最近想把一块东西封装成一个jar包,这样的话,在多个项目中就可以公共了。 就创建了一个SpringBoot项目,去掉了web模块。 遇到的问题 使用maven打包之后,但是其他引入了这个
手撕代码八百里
2020/10/26
2K0
解决SpringBoot jar包中的文件读取问题
SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档、导出模版等),本地开发时可以正常读取 ,但是,当我们打成jar包发布到服务器后,再次执行程序时就会抛出找不到文件的异常。
程序员小明
2020/08/27
3.2K0
maven打包时打包指定的lib文件夹
然后cmd切换到项目根路径执行打包命令:mvn clean package -Dmaven.test.skip=true
全栈程序员站长
2022/09/02
3.3K0
maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4
今天要引入json包,发现报了这个错 Missing artifact net.sf.json-lib:json-lib:jar:2.4 一开始以为是本地仓库从中央仓库下载jar的时间过久的时候,我直接强制终止了,导致从中央仓库下载jar包失败,然后我把本地仓库 net.sf.json-lib:json-lib的文件夹删了,重新导入还是不行
秋白
2019/02/21
3.2K0
maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4
包和 jar 文件的创建
在之前的文章中,讲到了面向的 3 大特性(封装、继承、多态)和面向对象设计的 5 大原则(SRP、OCP、LSP、DIP、ISP)。此外,我们还讲了如何创建一个类,并且在创建类后如何构造一个对象。然后还介绍了类中的属性和方法,并对构造方法和引用也做了简单的讲解。
村雨遥
2022/10/28
9020
包和 jar 文件的创建
jar包为什么要放在web-inf的lib下?
为什么jar包一定放在lib文件夹下面,我换个地方就不行。这个其实如果你不是用服务器是没有任何问题的,但是当你使用了web服务器类似于tomcat这种,那么你就要小心了。jar包导入工作空间这个是由我们人为控制的,我导哪个空间就有哪个,我不导行不行,可以,编译器会自动去寻找他所需要的jar包,但是服务器就不会他只会去寻找lib文件夹下的jar包并将他们拷贝到服务器上(就是在你服务器的当前项目的lib文件夹)
wuweixiang
2018/08/14
1.3K0
jar包为什么要放在web-inf的lib下?
android 自己制作Jar包 和 修改 现成的 Jar包文件
先看如何创建自己的 Jar 包 里面随便写个方法 public int add(int a,int b){ return (a+b); } task makeJar(type:
杨奉武
2019/10/03
1.5K0
Roslyn 打包 NuGet 包 BuildTransitive 文件夹用于穿透依赖传递拷贝文件
默认的 PackageReference 可以实现传递依赖,传递依赖的含义是是假定 B 项目安装了 A 库,而 C 项目依赖 B 项目,那么 C 项目将会自然拿到 A 库的 DLL 引用。但默认的 NuGet 包的构建指导文件 targets 命令是不会在传递执行的,也就是如上的 C 项目将不会执行 B 项目安装的 A 库里面的 target 内容 有一些项目需要拷贝自定义文件,例如拷贝图片或者一些 Native 的 DLL 等资源。如 WPF 框架需要拷贝 PenIME 等资源。如果只是在最底层的项目安装了库,那为了让可执行文件项目也输出库的资源,就需要在可执行项目上也安装库。以上的方法的不足在于安装复杂,也许会忘记安装 本文告诉大家一个解决方法是通过在制作库的时候,加上 BuildTransitive 文件夹,在此文件夹内添加构建指导文件,此时这个构建指导文件 targets 文件里面的命令将会在传递中执行,也就是说只需要在底层的项目安装即可,不需要在可执行项目上也安装库
林德熙
2021/12/24
7250
为什么SpringBoot jar包中的文件读取不到?
菜菜同学每天的工作便是与三方对接,而且这次的任务是接入 N 套证书相关配置文件。考虑到后期易于上线,于是菜菜开启了从硬编码到易维护的代码优化之路。
一猿小讲
2021/10/08
1.4K0
python引入其他文件夹里的py文件的方法
在写python框架的时候,经常会用到引入其他文件夹里的python文件,要是都在同目录下的还好,直接import就好了,可是有的不在同一个目录,很多初学者就发现直接import报错了 1.如果是同目录下的引入
matinal
2023/10/13
8080
python引入其他文件夹里的py文件的方法
Intellij idea打带Manifest文件的jar包(可执行jar包)
老版本Intellij idea可以很方便地打带Manifest文件的jar包,也就是可行性的Jar包。今天使用新版的Intellij idea打jar包时遇到了坑,jar包中竟然没有MANIFEST文件。
程裕强
2019/05/27
4.8K0
根据包名查找 Jar 包文件
很多时候,我们需要根据包名来查找一些依赖所在的jar包,比如我们想要查找com.alipay这个包及其文件所在的jar包。
技术小黑屋
2020/01/19
2.3K0
Linux怎么复制文件到其他文件夹
本文主要讲解linux怎么复制文件到其他文件夹。 在Linux和Unix系统上工作时,复制文件和目录是您每天要执行的最常见任务之一。 cp是一个命令行实用程序,用于复制Unix和Linux系统上的文件和目录。在本文中,我们将解释如何使用cp命令。
狼啸风云
2021/04/13
15.8K0
操作 PDF 文件的常用JAR包
iText 5是最早一个提供对PDF进行操作的JAR包,不过目前该JAR已经不再进行后续开发。可以从官网看到如下一段话:
BUG弄潮儿
2020/12/02
2.6K0
获取当前jar包路径_java获取jar文件
获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:
全栈程序员站长
2022/11/10
7.5K0

相似问题

取消订阅时事通讯

22

Magento -订阅和取消订阅时事通讯无事件

42

Zencart订阅时事通讯

11

如何使用Sitecore 8.1、WFFM和EXM配置时事通讯订阅

14

时事通讯订阅与注册

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文