我试图弄清楚如何正确编写此准备好的语句。
我有一个函数返回带有列标题的数组。这行得通。
$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
所以我猜测我对表中的值使用了准备好的语句,因为它带有多余的引号。正确的做法是什么?如果有的话?