使用 PHP 从 MYSQL 获取数据不返回任何结果

Get data from MYSQL using PHP returns no results

提问人:GeeSplit 提问时间:4/6/2016 更新时间:4/6/2016 访问量:71

问:

所以我正在使用本教程: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'

语句,它似乎返回了正确的数据。 知道是什么原因造成的吗?

提前致谢!

php mysql 未定义索引

评论

0赞 slax0r 4/6/2016
您是否确保在数组中设置了“klas”?而且你对这种方式的SQL注入持开放态度。在将输入放入查询之前,请清理输入。$_GET
0赞 Manjeet Barnala 4/6/2016
$sql = 'SELECT * FROM lessen WHERE klas="'.$klas.'"';
0赞 Daan 4/6/2016
@ManjeetBarnala 完全没有改善。
0赞 GeeSplit 4/6/2016
我该如何检查?我将研究如何清理我的输入。我没有任何PHP经验。
0赞 Mangesh Sathe 4/6/2016
检查变量$sql,尝试echo$sql;输出是什么?

答:

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']