Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 使用信息_SCHEMA.TABLES中的数据_Php_Mysql_Pdo_Information Schema - Fatal编程技术网

Php 使用信息_SCHEMA.TABLES中的数据

Php 使用信息_SCHEMA.TABLES中的数据,php,mysql,pdo,information-schema,Php,Mysql,Pdo,Information Schema,我试图根据用户输入从数据库中获取表名(不同的查询需要不同的表)。我有以下代码: function getTables(){ $dbConn = new dbConn(); $conn = $dbConn->connect(); $data = $conn->query('SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = "dbName" AND table_name

我试图根据用户输入从数据库中获取表名(不同的查询需要不同的表)。我有以下代码:

function getTables(){

    $dbConn = new dbConn();
    $conn = $dbConn->connect();

    $data = $conn->query('SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = "dbName" AND table_name LIKE "' . $this->table . '%";');

    $tables = $data->fetchALL(PDO::FETCH_ASSOC);

    foreach($tables as $item) {
        echo $item;
        }

    return $tables;

}
上面的输出是ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray。当我打印($tables)时,我得到:


如何从中获取实际的表名以在查询中使用?

是,
fetchAll()
返回行数组的二维数组。因此,在您的循环中,
echo$item['table_name']
,因为这是保存表名的键。我将添加以下建议:在允许用户输入转换为查询表名时,请格外小心。您不能将表名绑定为参数,必须非常小心,不要允许用户对不允许的表执行查询。因为您使用的是PDO,所以应该使用准备好的查询来插入用户数据。对于普通查询中的表名,您不能这样做,但您可以使用
信息\u模式
,因为表名就是其中的数据。太棒了,谢谢Michael。现在将这些赋值给变量;)是的,我知道我应该使用准备好的查询,这只是掌握PDO的早期阶段。谢谢你的帮助@好了,迈克尔,现在我明白了。我目前正在对一个白名单表运行用户输入,然后将其与准备好的语句结合使用。但是,如果不能将表名绑定为参数,如何为多个表编写动态查询?
Array ( [0] => Array ([table_name] => my_table0) [1] => Array ([table_name] => my_table1) etc. etc.