Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在RESTful中可以传递等号吗?_Php_Database_Rest_Restful Url - Fatal编程技术网

Php 在RESTful中可以传递等号吗?

Php 在RESTful中可以传递等号吗?,php,database,rest,restful-url,Php,Database,Rest,Restful Url,在我尝试传递WHERE语句之前,我的RESTful接口工作正常 例如: 通过的周长: SELECT = "this"; FROM = "that"; WHERE = " 'ID' = 332"; URL可能如下所示 www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332 然后在我的php脚本中 if (isset($_GET['SELECT'])) { $SELECT = $_GET['SELECT']; } if (

在我尝试传递WHERE语句之前,我的RESTful接口工作正常

例如:

通过的周长:

SELECT = "this";
FROM = "that";
WHERE = " 'ID' = 332";
URL可能如下所示

www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332

然后在我的php脚本中

if (isset($_GET['SELECT']))
{
    $SELECT = $_GET['SELECT'];
}
if (isset($_GET['FROM'])) 
{
    $FROM = $_GET['FROM'];
}
if (isset($_GET['WHERE'])) 
{
    $WHERE = $_GET['WHERE'];
}
所以我认为WHERE语句中的等号把事情搞砸了。我这样说对吗


如果是这样,还有什么替代方案呢?

RESTful接口是关于永久链接的资源。在数据库上公开直接查询不会封装存储层,也不是RESTful的。它是一种透明的RPC机制,通过http查询数据库(直接由使用者查询)

在您的示例中:

www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332
“that”似乎是资源,“this”是其中的数据,id是对该对象的唯一引用

因此,要想更安静,请考虑:

www.example.com/api/that/{id}
返回的数据包含“列”或属性

{
    attr1:val1,
    attr2:val2
}
您的服务器可以将该/{id}映射到一个方法,该方法获取id,制定必要的sql查询,获取表格数据,填充对象并返回它(序列化为json、xml等)

如果需要进一步筛选,请考虑QuestRistPARAMS来控制选项(但不是SQL WHERE子句)。


RESTful接口是关于永久链接的资源。在数据库上公开直接查询不会封装存储层,也不是RESTful的。它是一种透明的RPC机制,通过http查询数据库(直接由使用者查询)

在您的示例中:

www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332
“that”似乎是资源,“this”是其中的数据,id是对该对象的唯一引用

因此,要想更安静,请考虑:

www.example.com/api/that/{id}
返回的数据包含“列”或属性

{
    attr1:val1,
    attr2:val2
}
您的服务器可以将该/{id}映射到一个方法,该方法获取id,制定必要的sql查询,获取表格数据,填充对象并返回它(序列化为json、xml等)

如果需要进一步筛选,请考虑QuestRistPARAMS来控制选项(但不是SQL WHERE子句)。


-您在url中输入的所有内容都应该正确编码将SQL作为参数进行分类似乎是错误的解决方案,并且会使自己面临SQL注入或意外的非常繁重的查询。你不能传递特定的参数并自己在服务器上构建SQL吗?让所有的东西都通过一个
rest.php
和SQL查询部分参数,这几乎就是不RESTful的缩影。你需要先了解SQL注入,然后才能声称它不易受到攻击。可能我所要做的就是发送一个
,其中
'ID'=332;从表中删除*'ID'=332
这样的东西起作用,你就不可能基于所问的问题。
'ID'
周围的引号将被转义。-您在url中输入的所有内容都应该正确编码将SQL作为参数进行分类似乎是错误的解决方案,并且会使自己面临SQL注入或意外的非常繁重的查询。你不能传递特定的参数并自己在服务器上构建SQL吗?让所有的东西都通过一个
rest.php
和SQL查询部分参数,这几乎就是不RESTful的缩影。你需要先了解SQL注入,然后才能声称它不易受到攻击。可能我所要做的就是发送一个
,其中
'ID'=332;从表中删除*'ID'=332
这样的东西起作用,你就不可能基于所问的问题。
'ID'
周围的引号将被转义。如何使用$\u GET提取周长。如果我能弄清楚如何在php端正确解析来构建我的查询,我会更喜欢这种格式。我已经在node.js/express和C#(asp.net webapi)中完成了所有REST服务器。这两种方法都提供了基于路由映射方法的简单方法。我还没有用php做过,我想这里有一些库。一个快速的google展示了一些使用$u服务器['PATH_INFO']返回/api/that/{id}伟大的阅读:注意,该协议允许以(几乎)类似SQL的语法传递查询:将url模式映射到方法的路由是编程的便利。安全性的关键在于用户没有传递您尝试验证然后直接执行的sql。确保您正在构建基于输入的sql(本例中的id和几个选项)。在构建sql时,请确保sql参数,不要包含字符串。如何使用$\u GET提取周长。如果我能弄清楚如何在php端正确解析来构建我的查询,我会更喜欢这种格式。我已经在node.js/express和C#(asp.net webapi)中完成了所有REST服务器。这两种方法都提供了基于路由映射方法的简单方法。我还没有用php做过,我想这里有一些库。一个快速的google展示了一些使用$u服务器['PATH_INFO']返回/api/that/{id}伟大的阅读:注意,该协议允许以(几乎)类似SQL的语法传递查询:将url模式映射到方法的路由是编程的便利。安全性的关键在于用户没有传递您尝试验证然后直接执行的sql。确保您正在构建基于输入的sql(本例中的id和几个选项)。当您构建sql时,请确保sql参数,而不是字符串。