准备声明表和列的名称?

时间:2018-12-04 15:06:55

标签: php mysql

我试图弄清楚如何正确编写此准备好的语句。

我有一个函数返回带有列标题的数组。这行得通。

$q = $dbh->prepare("DESCRIBE ".$tablename);
    $q->execute();
    $table_fields = $q->fetchAll(PDO::FETCH_COLUMN);
    return $table_fields;

我了解到这允许sql注入,因此我想尝试将其转换为准备好的语句。所以我尝试了这个:

$q = $dbh->prepare("DESCRIBE :tablename");
$q->bindParam(':tablename', $tableName);
$q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN);
return $table_fields;

但是它给了我这个错误:

  

未捕获的PDOException:SQLSTATE [42000]:语法错误或访问   违反:1064您的SQL语法有错误;查看手册   对应于您的MariaDB服务器版本的正确语法   在第1行的“测试”附近使用   C:\ xampp \ htdocs \ test.php:7堆栈跟踪:#0   C:\ xampp \ htdocs \ test.php(7):PDOStatement-> execute()#1   C:\ xampp \ htdocs \ test.php(31):getGraphHeaders(Object(PDO),   'table1')#2 {main}被抛出   第7行的C:\ xampp \ htdocs \ test.php

所以我猜测我对表中的值使用了准备好的语句,因为它带有多余的引号。正确的做法是什么?如果有的话?

0 个答案:

没有答案