2015-07-11 73 views
1

我是一个PHP和MySQL的noob。我正在寻找一种方法来访问我的数据库中的表格,并以行格式获取数据。我发现以下代码:有没有一种方法来定义在API中的表名称Url

<?php 

$con = mysql_connect("localhost","someuser","somepassword"); 

if (!$con) 
    die('Could not connect: ' . mysql_error()); 

mysql_select_db("TestDatabase", $con); 

$result = mysql_query("SELECT * FROM Customer"); 

$output = array(); 
if ($result) 
    while ($row = mysql_fetch_assoc($result)) 
     $output[] = $row; 

print(json_encode($output)); 

mysql_close($con); 

?> 

现在的问题是我有大约超过24个表在我的数据库。所以我希望有没有办法通过像API这样的访问URL输入表的名称。如果有,那么请帮助我。提前致谢!!!

回答

1

有一个非常简单的方法可以通过url传递一些请求类型id(表)。

但是没有采取适当的措施,这是要求大麻烦

想象一下,您使url看起来像https://myserver.com/myfile.php?table=aaa,然后将您的查询更改为"select * from {$_GET['table']}"。然后,恶意用户可能会欺骗您的代码,从您有权访问的任何数据库/表中选择数据(使用dbname.table),其中包括mysql系统表(如mysql.user)。从您的原始文章中可以看出,您正在使用root用户访问数据库,并且最有可能访问所有内容 - 通常最好创建一个单独的数据库用户,该用户只能访问需要执行的操作。

另一点是,你必须总是验证/逃避用户的输入,使得它为sql查询(或使用一个API,它可以做变量绑定),因为这样任何恶意用户可能会在您sql服务器上执行任意代码。请查询sql injection以了解更多信息。

举一个简单的解决方案,我会建议使用这样的代码来明确地允许特定的表:

$allowedtables=array('aaa'=>1,'bbb'=>1); 
if (!$allowedtables[$_GET['table']]) 
    return; 
$query="select * from {$_GET['table']}"; 

不同的,但不是那么重要的话题,不推荐任何新的代码使用过时的API。 ..

+0

为喜炎我已经创建了一个API,它的网址是这样的: HTTP://mywebsite/api/folder/index.php 但每当我尝试访问它,它给了我一个错误。你能帮忙吗? –

+0

最有可能的错误是有关服务器/ php错误配置... – bbonev

1

PHP提供了三种不同的MySQL API扩展:

  1. MySQL的改进扩展:该扩展完全支持在MySQL 5.0中使用的认证协议,以及所制备的语句和多个语句的API。另外,这个扩展提供了一个高级的,面向对象的编程接口。

  2. MySQL函数(PDO_MYSQL):它是PHP数据库抽象层PDO(PHP数据对象)的MySQL驱动程序。 PDO MySQL驱动程序位于PDO本身下面的层中,并提供MySQL特定的功能。该扩展从PHP 5.1.0开始提供。

  3. 原始的MySQL API:适用PHP版本4和5中,此扩展到MySQL 4.1旨在用于的MySQL版本使用之前。该扩展不支持MySQL 4.1中使用的改进的身份验证协议,也不支持预准备语句或多个语句。要使用这个扩展的MySQL 4.1中,你可能会配置MySQL服务器设置old_passwords系统变量为1

Original MySQL API从PHP 5.5.0已被删除。如果您使用PHP 5.5.0或更高版本,则必须迁移到mysqliPDO_MySQL

您可以参考here可用的文档以供进一步参考。

相关问题