【问题标题】:Query with quotes not working带引号的查询不起作用
【发布时间】:2014-09-06 22:37:35
【问题描述】:

我正在发送一个查询字符串,例如:-

String query = "select * from table where id = 12345 or id like '___1435'";

在 php 代码中:-

$phone     = $_REQUEST['data1'];
$result = mysql_query($phone);
    return $result;

通过 android 但它不起作用。 但是这样的查询:-

String query = "select * from table where id = 12345 or id = 21435";

正在工作。

我也试过了:-

$phone     = mysql_real_escape_string($_REQUEST['data1']);
$result = mysql_query($phone);
    return $result;

可能是什么问题。 很可能它与我在字符串中使用的引号有关。 我该如何克服呢?

谢谢!

【问题讨论】:

  • 您需要转义下划线。下划线在 SQL 中有一个特殊的用途。您的数据库中是否存在下划线?
  • 我只是使用下划线作为通配符
  • 同样的查询甚至可以在 HTML 表单中工作
  • String query = "select * from table where id = 12345 or id like '___1435'"; 这适用于 HTML 表单,但不适用于 android,这是你说的吗?
  • 我使用的是 UTF-8 编码

标签: php android mysql sql request


【解决方案1】:

LIKE 查询需要百分号来表示通配符,我假设您正在尝试:

id like '%___1435%'

如果您不想要这种通配符行为,那么您可以删除喜欢

id = '___1435'

【讨论】:

  • FWIW,SQL 模式匹配使您可以使用_ 匹配任何单个字符,使用% 匹配任意数量的字符(包括零个字符)。
【解决方案2】:

我认为问题在于您正在尝试对整数字段执行字符串比较。首先尝试将您的 ID 字段转换为 CHAR,如下所示:

select * from table where id = 12345 or CAST(id as CHAR) like '___1435'

编辑:这将是一场猜谜游戏,除非您可以 a) 发布一些错误日志或 b) 发布您的 MySQL 查询日志(以查看实际执行的查询),您可以通过打开通用查询日志来启用它您的安装。由于看起来您正在通过 POST 接受查询字符串,因此如果该字符串已以任何方式编码(即 url 编码),如果没有先正确解码,它将影响您的查询。

更好、更安全的方法是创建一个接受 ID 进行查询的特定 Web 服务,您可以将其传递到准备好的语句服务器端。无论如何,这是更好的做法,这样您的系统就不会受到来自客户端的公开查询的影响。

【讨论】:

  • @HaigBedrosian :我认为他还没有 125 个声望可以投票。 :P
  • 好点!我知道有很多有趣的事情在进行,但是拒绝投票旨在帮助发布者找到解决问题的合法答案的做法会适得其反。它不鼓励进一步参与。 /off-soap-box
  • 我在从 android 设备@HaigBedrosian 发送数据时使用 UTF-8 编码
  • 好的,这可能会导致您的问题。您可以记录您的查询并查看实际通过的数据吗?我认为这将为您提供识别和解决问题所需的提示。
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 2015-01-04
  • 1970-01-01
  • 2017-10-05
  • 2023-03-05
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
相关资源
最近更新 更多