获取表-6ren">
gpt4 book ai didi

php - 语法错误或访问冲突 : 1103 Incorrect table name with $_POST array data

转载 作者:行者123 更新时间:2023-11-29 02:54:37 25 4
gpt4 key购买 nike

我有这个表格

<form action="table_results.php" method="post">
<?php
foreach (get_table($_POST['table']) as $row) { // Fill $row variable with table fields
?>
<input type="text" name="table[ <?php echo $_POST['table'] ?> ][ <?php echo implode($row) // Create table array ?> ]" size="20" >
<?php
}
?>
<p><input type="submit" /></p> <!-- Post the table array to table_results.php -->
</form>

获取表();返回特定表的字段名称

当我将发布的数据用于以下功能时

function search_db($table, $field, $query) {
$database = new Database();
$database->query( "SELECT * FROM `" . $table . "` WHERE `" . $field . "` = :query" );
$database->bind(":query", $query);
$database->execute();

$result = $database->resultSet();

if (!$result) {
print 'ERROR';
die();
} else {
return $result;
}
}

我收到错误:“语法错误或访问冲突:1103 表名不正确”

我试过测试变量是否包含正确的数据

$array = $_POST['table'];
$table = implode(array_keys($array));
print $table;

结果:计算机

当我在 $table 变量中输入“computer”时 - function search_db('computer', 'id', 1); - 它工作正常

当我打印 $table 变量和“computer”时,我得到了完全相同的输出。

我的数据库无法识别 $table 变量的原因可能是什么?

最佳答案

这可能是你的问题:

name="table[ <?php echo $_POST['table'] ?> ]

请注意,您在 html 数组中的变量前后添加了空格,因此当您打印结果时,它看起来是正确的,但实际结果将是 "computer " 而不是 “计算机”。并且“计算机”表不存在。

您可以使用 var_dump() 而不是 print() 来确认;对于单词 computer,它可能会显示长度为 10 而不是 8。

所以你需要这个:

name="table[<?php echo $_POST['table'] ?>]

除此之外,您应该真正为表名和列名使用白名单,以避免 sql 注入(inject)和像您现在遇到的问题。

关于php - 语法错误或访问冲突 : 1103 Incorrect table name with $_POST array data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034007/

25 4 0