Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 有没有办法在API Url中定义表名_Php_Mysql_Api - Fatal编程技术网

Php 有没有办法在API Url中定义表名

Php 有没有办法在API Url中定义表名,php,mysql,api,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_que

我是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个表。所以我希望有一种方法可以通过访问URL(如API)输入表名。如果有,请帮助我。提前感谢

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

  • MySQL改进扩展:此扩展完全支持MySQL 5.0中使用的身份验证协议,以及准备好的语句和多语句API。此外,此扩展还提供了一个高级的面向对象编程接口

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

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

  • 原始MySQL API
    已从PHP5.5.0中删除。如果您使用的是PHP 5.5.0或更高版本,则必须迁移到
    mysqli
    PDO_MySQL


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

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

    然而,如果不采取适当的措施,这将带来巨大的麻烦

    假设您使url看起来像
    https://myserver.com/myfile.php?table=aaa
    然后将查询更改为
    “从{$\u GET['table']}中选择*”
    。然后,恶意用户可能会诱使您的代码从您可以访问的任何数据库/表中选择数据(通过使用
    dbname.table
    ),包括
    mysql
    系统表,如
    mysql.user
    。从您最初的帖子中可以看出,您正在使用
    root
    用户访问数据库,并且很可能它可以访问所有内容-通常,创建一个单独的数据库用户是一个好主意,该用户只可以访问需要做的事情

    另一点是,您必须始终验证/转义用户输入,使其进入
    sql
    查询(或使用可以进行变量绑定的API),因为这样任何恶意用户都可能在
    sql
    服务器上执行任意代码。有关更多信息,请查看谷歌的
    sql注入

    作为一个简单的解决方案,我建议使用这样的代码来显式地允许特定的表:

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

    另一个不同但同样重要的主题是,不建议在任何新代码中使用不推荐的API…

    Hi for tis我创建了一个API,它的url如下:但每当我尝试访问它时,它都会给我一个错误。你能帮忙吗??