gpt4 book ai didi

php - 使用 PHP 变量自定义 SQL 语句?

转载 作者:行者123 更新时间:2023-11-29 04:02:18 26 4
gpt4 key购买 nike

我正在编写一个函数,如果它已经存在,它将删除一个表。它会询问用户他们想如何称呼该表,获取该响应并将其放入一个 php 变量中。我想为 sql 创建一个自定义的 drop 语句,这样 sql 就不会出错。这是我的。

$table = $_POST["tablename"];      //gets table name from html page

drop_table($db, $table); //call function

function drop_table($db,$table){
$drop = "DROP TABLE IF EXISTS .$table. "; //this is the part I can't figure out. How do I add in the table name to the statement,
$q = mysqli_query($db, $drop); //since the sql statement has to be in quotes?
}

谢谢!

P.Ss 这是一个仅用于分析的内部系统。如果只有我和我的同事在使用它,不用担心丢表

最佳答案

这里的问题是语法错误,试图在 $table 中用点连接。删除那些。

$drop = "DROP TABLE IF EXISTS $table ";  

但是大得多的问题是您允许最终用户删除数据库中的任何表,因为您没有以任何方式过滤输入。

您需要确保您的用户只删除当前所选数据库中的表,这意味着至少不允许 . 进入 $table 以防止像 $table = 'information_schema.user'

这样的东西
if (strpos($table, '.') !== FALSE) {
// don't allow the action!
}

要采取的另一个步骤是在执行 DROP 之前验证 $table 的值存在于 information_schema.TABLES 中并且属于正确的当前数据库 语句。

// If this returns 1, the table exists in the correct database and can be dropped.
// note that $table is escaped here. I didn't fill in the mysqli_query() but obviously
// this is to be executed. It would be even better with a MySQLi prepared statement
"SELECT 1
FROM information_schema.TABLES
WHERE
TABLE_SCHEMA='the_allowed_database'
AND TABLE_NAME='" . mysqli_real_escape_string($db, $table) . "'"`

通过此检查后,您最好为表指定一个前缀,这些表在环境中是灵活的,因此允许删除,这样用户就无法删除事件中的每个表数据库。例如,只允许删除前缀为 usertable_ 的表。

if (strpos($table, 'usertable_') !== 0) {
// don't permit deletion
}

这是一个很难保护的设计,我建议您退后一步,重新考虑这里的策略。当允许用户根据表单输入删除表格时,您需要格外小心。

关于php - 使用 PHP 变量自定义 SQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11160626/

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