【问题标题】:PHP script to get cell based on first column cell of mysql table [closed]PHP脚本根据mysql表的第一列单元格获取单元格[关闭]
【发布时间】:2012-04-11 12:14:30
【问题描述】:

我正在尝试实现一个搜索活动,该活动根据搜索从 mysql 表中获取数据。

我想写一个 PHP 脚本来使用输入到 EditText 中的字符串并获取相邻的单元格。

例如,假设mysql表有两列:Firstname和surname;我希望能够通过搜索名字来获取姓氏(在 EditText 中输入名字。我知道这可能需要 SELECT Surname FROM Names WHERE ... 查询,但我如何从我的 Java 类中指示变量?

到目前为止的 PHP 脚本:

<?php
mysql_connect("localhost","root","");
mysql_select_db("androidapp");
$sql=mysql_query("SELECT surname WHERE $get'fname'");
while($row=mysql_fetch_assoc($sql)) $output[]=$row;
print(json_encode($output));
mysql_close();
?>

另外,HttpGet 方法或 HttPost 方法是否合适,结果应该在 TextView 中显示姓氏

【问题讨论】:

  • 从你的问题中我明白的东西太少了!说真的,我什么都不懂,请改写你的问题,以更好地解释你所拥有的,以及你想要实现的目标。
  • 不要使用 mysql_* 函数!除了名称之外,它们已被弃用,并且与 MySQL 5 不完全兼容
  • 我已经更新了,希望它更有意义?

标签: java php android mysql


【解决方案1】:

我假设您想通过 http post 或 http get 从 php 向 java (android) 发送和接收数据。如果我错了,请纠正我。

基本上你希望 php 返回的是与表中第一个名称匹配的行。

mysql_connect("localhost","root","");

mysql_select_db("androidapp");

$fname = mysql_real_escape_string($_POST['fname']);

$result = mysql_query("SELECT surname FROM names WHERE fname = '$fname'");

//if you want only one record then
$row = mysql_fetch_array($result);

echo json_encode($row);

mysql_close();

始终记得使用 php 的 mysql_real_escape_string() 函数转义任何 sql 注入的数据。我也更喜欢 HTTP POST。

您必须从您的 android 应用程序向 PHP 脚本所在的服务器发送一个 http 请求。

希望对你有帮助

【讨论】:

    【解决方案2】:

    我不太确定你在用你的查询做什么,但我会使用

    $fname = addslashes($_GET['fname']);
    $sql = mysql_query("SELECT surname FROM Names WHERE fname='$fname'");
    ...
    

    显然,您在查询中传递了fname=whatever

    GET 绝对没问题。 HTTP 将 GET 请求指定为从服务器返回信息且没有其他副作用(如修改数据库)的请求。

    【讨论】:

      【解决方案3】:

      我猜你有一个 Android 应用程序(用 Java 编写)与一种用 PHP 编码的 Web 服务进行通信。

      因此,您的 PHP 应用程序应该像任何 Web 服务一样运行。

      在 PHP 中,您可以使用 $_GET、$_POST 或 $_REQUEST 全局变量检索赋予脚本的参数。

      • $_GET 仅包含通过 GET 方法发送的参数(即 直接在网址中)。

      • $_POST 仅包含通过 POST 方法发送的参数(即 嵌套在 http 查询中)。

      • $_REQUEST 是 $_GET + $_POST 的编译。

      对于 Web 应用程序,$_REQUEST 通常是最好的解决方案,因此您允许调用者使用任何方法(POST/GET)。如果您只想修复一个,请选择 $_POST 或 $_GET。

      因此,

      $sql = mysql_query("SELECT surname WHERE firstname='".mysql_real_escape_string($_REQUEST['fname'])."'");
      

      不要忘记使用mysql_real_escape_string() 转义参数以防止SQL注入。

      【讨论】:

      • $_REQUEST 非常危险,不要使用它!如果你不知道输入来自哪里,你就不能相信它。
      • $_REQUEST 仅包含 $_GET + $_POST($_COOKIES 不在 PHP 5.3 的默认配置中)。你说“如果你不知道输入来自哪里,你就不能相信它”,但实际上一个网络应用程序根本不能相信输入,你不知道它来自哪里,因为一个基本的知道者可以改变输入,因为他愿望。因此,您的应用程序必须在服务器端检查数据。所以你错了,$_REQUEST 并不比 $_GET、$_POST 更危险(仅在非常特定的情况下和包含 cookie 时)或者给我一个你断言的例子。
      • 仅仅因为它默认关闭并不意味着您可以依赖它关闭。恰恰相反,事实上。在安全方面,您必须始终假设最坏的情况。举个例子,suspekt.org/2008/10/01/…,除此之外,依赖 $_REQUEST 的 webapp 不能是 RESTful。
      • 你必须假设最坏的情况,我同意这一点,但这包括 $_COOKIES 中的任何值也可以同时出现在 $_GET + 和 $_POST 中。如果在 $_COOKIES 中很危险,那么在 $_GET 中很危险,在 $_POST 中也很危险。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多