【问题标题】:PHP code to fetch data from mysql server for mobile app [closed]用于从 mysql 服务器获取移动应用程序数据的 PHP 代码 [关闭]
【发布时间】: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 访问权限。

标签: php jquery mysql ajax json


【解决方案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 代码,请告诉我,例如 " 它可以在移动应用上运行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多