gpt4 book ai didi

php - PDO:显示表键无法正确绑定(bind)参数

转载 作者:可可西里 更新时间:2023-11-01 08:33:34 25 4
gpt4 key购买 nike

我想用这种方法从指定的表中获取键数组(主键、外键、...):

public function getTableKeys($table){
//OBTAIN TABLE KEYS
try {
$conn = $this->db->_pdo;
$conn->beginTransaction();

$query = $this->db->_pdo->prepare('SHOW KEYS FROM :table');
$query->bindParam(':table', $table, PDO::PARAM_STR);
$query->execute();
$keys = $query->fetchAll(PDO::FETCH_ASSOC);

$conn->commit();
return $keys;
}catch (Exception $e) {
$conn->rollback();
echo 'Caught exception: ', $e->getMessage(), "\n";
return false;
}
}

问题是,抛出了一个错误:

Caught exception: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ps_customer'' at line 1

现在,如果我在 PHPMyAdmin 中手动运行 SQL,它会成功返回一组键。问题是它必须采用以下格式:

SHOW KEYS FROM ps_customers

采用这种格式(带引号):

SHOW KEYS FROM "ps_customers"

我的问题是:我如何 bindParam 参数需要插入到 SQL 中但不带引号但在快速字符串中(使用 PDO::PARAM_INT 不起作用)。

谢谢大家的建议。

最佳答案

正如 Ben 所说,您不能在准备好的语句中绑定(bind)表名。您可以通过 whitelisting 清理表名.

允许的表名数组用于确保只有白名单上的表名可以使用。

$table = "table1";//Your table name
$allowed_tables = array('table1', 'table2');//Array of allowed tables to sanatise query
if (in_array($table, $allowed_tables)) {
getTableKeys($table);
}

SQL SHOW KEYS FROM $table 仅当 table1 在列表中时才会被查询。

public function getTableKeys($table){
//OBTAIN TABLE KEYS
try {
$conn = $this->db->_pdo;
$conn->beginTransaction();
$query = $this->db->_pdo->prepare('SHOW KEYS FROM $table');
$query->execute();
$keys = $query->fetchAll(PDO::FETCH_ASSOC);

$conn->commit();
return $keys;
}catch (Exception $e) {
$conn->rollback();
echo 'Caught exception: ', $e->getMessage(), "\n";
return false;
}
}

关于php - PDO:显示表键无法正确绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com