有没有办法在API网址

时间:2015-07-11 19:29:16

标签: php mysql api

我是PHP和MySQL的菜鸟。我正在寻找一种方法来访问我的数据库中的表,并以行格式获取其中的数据。我找到了以下代码:

<?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输入表的名称。如果有的话请帮助我。在此先感谢!!!

2 个答案:

答案 0 :(得分:1)

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

  1. MySQL改进扩展:此扩展完全支持MySQL 5.0中使用的身份验证协议,以及Prepared Statements和Multiple Statements 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.

  4. 从PHP 5.5.0中删除了

    Original MySQL API。如果您使用的是PHP 5.5.0或更高版本,则必须迁移到mysqliPDO_MySQL

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

答案 1 :(得分:1)

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

然而,如果不采取适当的措施,这就要求大麻烦

想象一下,您将网址设为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 ...