用于从 mysql 服务器获取移动应用程序数据的 PHP 代码 [关闭]

Posted

技术标签:

【中文标题】用于从 mysql 服务器获取移动应用程序数据的 PHP 代码 [关闭]【英文标题】:PHP code to fetch data from mysql server for mobile app [closed] 【发布时间】:2015-06-22 20:30:46 【问题描述】:

我的 php 代码用于从 mysql 服务器获取数据以显示哪个非常适合网站,但我想用它来制作移动应用程序, 它是否适用于移动应用程序?因为我正在使用下面的 ajax 调用(下面的代码)。

还有我如何在这里使用 json,因为我是新手,需要帮助。

<?php
include('connect.php');
$filmId=$_GET['filmId'];
$sql ="SELECT *, DATE_FORMAT(filmReleaseDate, '%d %b %Y' ) filmReleaseDate FROM films where filmId ='$filmId'";
mysqli_query("SET NAMES utf8");
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result))

    $id=$row['filmId'];
    $name=$row['filmName'];
  $year=$row['filmYear'];

echo "$name, $year";


mysql_free_result($result);
mysqli_close($conn);
?>

这是ajax代码,当我点击href时它会处理上面的php请求来获取数据。

var xmlhttp = new XMLHttpRequest();
var url = "./searchfilmsbyname.php";
xmlhttp.onreadystatechange = function () 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
        myFunction(xmlhttp.responseText);
    

xmlhttp.open("POST", url, true);
xmlhttp.send();

function myFunction(response) 
    var arr = JSON.parse(response);
    var i;
    var out = "";
    for (i = 0; i < arr.length; i++) 
        out += "<li><a href ='filmdetails.php?filmId=" + arr[i].Id + "'>" + arr[i].Film + "</a></li>";
        if ((i + 1) == arr.length) 
            document.getElementById("searchfilmsbyname").innerhtml = out;
            $("#searchfilmsbyname").listview('refresh');
        
        

【问题讨论】:

作为一个公平的警告,您的查询可能是 SQL 注入的,因为您直接在查询中使用来自用户输入的变量。我强烈建议阅读prepared statements。 我不知道我是否可以推荐我写的一个工具包,但是看看Aye Aye Api。它仍处于测试阶段,缺乏适当的文档(有一个快速入门指南)甚至是 website,但它的设计目的是使构建 API 尽可能简单。将它与 Doctrine 混合使用,您将拥有非常强大的 API MySQL 访问权限。 【参考方案1】:

我不确定它在您的网站上是如何工作的,也许您正在包含它而不是使用 ajax,但上面代码的问题是您没有发回有效的 json 所以:

function myFunction(response) 
  var arr = JSON.parse(response);
  ...

将失败,因为:

$id=$row['filmId'];
$name=$row['filmName'];
$year=$row['filmYear'];

// this does not generate valid json:
echo "$name, $year";

您应该做的是将所有行添加到数组中,并且仅在最后输出编码为 json 的数组:

$rows = array();
while($row = mysqli_fetch_array($result))

    $rows[] = array('id' => $row['filmId'],
                    'name' => $row['filmName'],
                    'year' => $row['filmYear']);

echo json_encode($rows);

除此之外,您还有一个 sql 注入问题。您应该使用准备好的语句,而不是将变量直接注入到查询中。

【讨论】:

@ jeroen 如果我使用你的代码,我会得到如下数据:["id":"55","name":"Godzilla","year":"2014"] 我想要像“Godzilla, 2014”之类的东西,我能够获取 json 数据,但我如何将它们转换为用户看到相同的数据? @RRPandey 是的,但这是您的 javascript 所期望的,如果您想在 javascript 中执行 ... + arr[i].id + ... 之类的操作,您需要这样做。您必须选择您的 php 脚本是返回普通文本还是 json,除非您开始测试 ajax 调用或常规包含并相应地修改输出,否则您不能同时拥有这两种方式。 因为我打算将它用于移动应用程序,我想以文本形式使用该 json 格式,例如“Godzilla,2014”我如何使用与我在 js 中非常新的一样它有点变硬 @RRPandey 你不能,至少不可靠,当涉及 javascript 时,json 是要走的路。你可以在你的 ajax 请求中发送一个额外的值来指示输出应该是 json 并在你的脚本中使用它来确定输出的类型。 好的,在这种情况下,如果我在 href 上使用上述 php 代码,请告诉我,例如 " 它可以在移动应用上运行吗?

以上是关于用于从 mysql 服务器获取移动应用程序数据的 PHP 代码 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从服务器获取数据到移动应用程序的最佳方式

从 iOS 上的 .net Web 服务获取数据

在移动应用程序中持续从服务器获取更新的最佳方式是啥?

从移动浏览器获取位置数据

使用php从mysql获取数据到android

获取错误MyODBC字段'img_valid'在移动服务器后没有默认值