【问题标题】:Insert Variables into a table which is selected from a PHP variable name将变量插入从 PHP 变量名中选择的表中
【发布时间】:2024-01-23 14:58:01
【问题描述】:

所以,我想将一些数据插入到 MySQL 表中,其中放入数据的表名是 PHP 变量。

类似这样的:

$tablename = "databasetable";

$insert = mysql_query(
"INSERT INTO '".$tablename."' (column1, col2) 
VALUES ('Blah', 'Blah')
");

但这当然行不通,所以我不知道该怎么做。 顺便说一句,我是 PHP 和 * 的新手。

【问题讨论】:

    标签: php mysql insert


    【解决方案1】:

    删除表名变量周围的单引号,它会起作用:

    $tablename = "databasetable";
    
    $insert = mysql_query(
    "INSERT INTO ".$tablename." (column1, col2) VALUES ('Blah', 'Blah')");
    

    【讨论】:

    • 这是答案,但是您 (Neo) 应该阅读 SQL 注入,并了解这可能会破坏您的数据库。
    • 谢谢。我已经使用 mysql_real_escape_string(); 转义了我插入的变量。我还发现我正在解析两个错误组合在一起的字符串,但现在我正在做的工作。
    【解决方案2】:

    怎么样:

    $tablename = "databasetable";
    $insert = mysql_query("INSERT INTO ".$tablename." (column1, col2) VALUES ('Blah', 'Blah')");
    

    即,没有您在表名周围放置的简单引号。

    或者,当您使用双引号字符串时,这意味着变量被插值:

    $tablename = "databasetable";
    $insert = mysql_query("INSERT INTO $tablename (column1, col2) VALUES ('Blah', 'Blah')");
    

    作为旁注,在这两种情况下,您都必须确定$tablename 不包含任何恶意数据!

    【讨论】:

      【解决方案3】:

      我的回答与 Doug 的类似,尽管我会在查询中围绕表名使用“反引号”来将其区分为表,以进一步防止恶意注入的可能性...

      例如

      $tablename = "databasetable";
      
      $insert = mysql_query("INSERT INTO `{$tablename}` (column1, col2) 
                               VALUES ('Blah', 'Blah')"
                           );
      

      【讨论】:

        最近更新 更多