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.