提问人:GeeSplit 提问时间:4/6/2016 更新时间:4/6/2016 访问量:71
使用 PHP 从 MYSQL 获取数据不返回任何结果
Get data from MYSQL using PHP returns no results
问:
所以我正在使用本教程:https://www.simplifiedcoding.net/android-mysql-tutorial-to-perform-basic-crud-operation/ 尝试从我的本地 MYSQL 服务器(使用 Wamp64)获取数据。起初我遇到了未定义的索引错误,我使用 isset() 语句修复了该错误。 但现在它只是返回:
{"result":[]}
但是,我在该数据库的 set 列中有很多数据。 代码如下:
<?php
//Getting the requested klas
$klas = isset($_GET['klas']) ? $_GET['klas'] : '';
//Importing database
require_once('dbConnect.php');
//Creating SQL query with where clause to get a specific klas
$sql = "SELECT * FROM lessen WHERE klas='$klas'";
//Getting result
$r = mysqli_query($con,$sql);
//Pushing result to an array
$result = array();
while ($row = mysqli_fetch_array($r)) {
array_push($result,array(
"id"=>$row['id'],
"klas"=>$row['klas'],
"dag"=>$row['dag'],
"lesuur"=>$row['lesuur'],
"les"=>$row['les'],
"lokaal"=>$row['lokaal']
));
}
//Displaying the array in JSON format
echo json_encode(array('result'=>$result));
mysqli_close($con);
?>
我试过了
SELECT * FROM lessen WHERE klas='$klas'
语句,它似乎返回了正确的数据。 知道是什么原因造成的吗?
提前致谢!
答:
0赞
Manjeet Barnala
4/6/2016
#1
使用此代码
<?php
$klas ='';
if(isset($_GET['klas']) && !empty($_GET['klas']))
{
$klas = $_GET['klas'];
require_once('dbConnect.php');
$sql = 'SELECT * FROM lessen WHERE klas="'.$klas.'"';
$r = mysqli_query($con,$sql);
$result = array();
while ($row = mysqli_fetch_array($r)) {
array_push($result,array(
"id"=>$row['id'],
"klas"=>$row['klas'],
"dag"=>$row['dag'],
"lesuur"=>$row['lesuur'],
"les"=>$row['les'],
"lokaal"=>$row['lokaal']
));
}
echo json_encode(array('result'=>$result));
mysqli_close($con);
}
?>
评论
0赞
Manjeet Barnala
4/6/2016
尝试在查询中使用静态值 ,并查看它是否返回结果klas
0赞
Manjeet Barnala
4/6/2016
'SELECT * FROM lessen WHERE klas="1"'
或数据库表中 KLAS 的任何值
0赞
GeeSplit
4/6/2016
SELECT * FROM lessen WHERE klas = '3ECA'
,它返回我需要的结果,但无法通过PHP脚本。
0赞
Manjeet Barnala
4/6/2016
你要进去了吗?3ECA
$_GET['klas']
0赞
GeeSplit
4/6/2016
等等,我在我的 php 脚本中这样做了:它返回我需要的值。$sql = "SELECT * FROM lessen WHERE klas='3ECA'";
0赞
Himel Nag Rana
4/6/2016
#2
第 1 点是:
isset
函数仅检查是否在全局数组中设置。因此,如果以某种方式为空 - 您的查询将返回空(不会给出错误)。klas
$_GET
$klas
因此,请检查访问位置中的值,并可能从访问位置检查值。或者您可以添加条件以避免空查询,例如 --$_GET
if (!empty($_GET['klas'])) {
// rest of the code block upto return
第 2 点是:
你已经提到,如果你回显它返回的sql
SELECT * FROM lessen WHERE klas=''{"result":[]}
这里的第二部分(JSON)来自在代码末尾回显结果。因此,对于第一部分(即回声$sql
),我们看到.如上所述,这实际上涉及到第 1 点。klas=''
因此,最后您必须检查为什么值显示为空白。这将解决您的问题。$_GET
更新:
来自 @GeeSplit的评论 对于请求
"GET /JSON-parsing/getKlas.php?=3ECA"
不会有任何内容,因为 url 中的查询字符串不包含任何键。$_GET['klas']
因此,您必须更改从调用文件的位置更改源。或者,您可以更改获取 的值的方式。klas
示例:
$tmpKlas = $_SERVER['QUERY_STRING'];
$klas = ltrim($tmpKlas, '=');
其余代码将起作用。
评论
0赞
GeeSplit
4/6/2016
起初我确实有代码,它在几个小时内返回了正常结果,但后来它突然给了我错误。我不知道从哪里开始。$klas = $_GET['klas']
0赞
Himel Nag Rana
4/6/2016
您可以在 WAMP 中看到 apache 访问日志。假设您的 PHP 文件的名称是 .然后,请求将作为 .因此,如果 klas 为空,则会显示类似 .api.php
..../api.php?klas=12315...
.../api.php?klas=
0赞
Himel Nag Rana
4/6/2016
日志如下所示:127.0.0.1 - - [06/Apr/2016:16:00:57 +0600] "GET /api.php/ HTTP/1.1" 200 4120 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"
0赞
GeeSplit
4/6/2016
当我重新加载 php 页面时,access.log 给了我这个:[06/Apr/2016:12:11:44 +0200] "GET /JSON-parsing/getKlas.php?=3ECA HTTP/1.1" 200 47
0赞
Himel Nag Rana
4/6/2016
所以这就是问题所在。对于请求,不会有任何原因导致 url 中的查询字符串不包含任何键。更新我的答案。"GET /JSON-parsing/getKlas.php?=3ECA"
$_GET['klas']
评论
$_GET
$sql = 'SELECT * FROM lessen WHERE klas="'.$klas.'"';