如何使用变量作为表名来插入数据

时间:2016-08-06 16:07:47

标签: php sql insert

$tablename = "channel";

mysql_query("INSERT INTO '".$tablename."' (episode_name,episode_title,episode_date)
  values ('$videoname','$videotitle','$date')");

3 个答案:

答案 0 :(得分:1)

在PHP中,双引号字符串文字将扩展标量变量。所以这可以像这样做

$sql = "INSERT INTO $tablename (episode_name,episode_title,episode_date)
                        values ('$videoname','$videotitle','$date')";

我认为您认为单引号是围绕表名称进行的,实际上它们在语法上并不正确。

您可以像这样

将表名和列名包装在反引号中
$sql = "INSERT INTO `$tablename` (`episode_name`,`episode_title`,`episode_date`)
                        values ('$videoname','$videotitle','$date')";

将值(....)包装在单引号中的原因是告诉MYSQL这些是文本值,因此,如果将列定义为TEXT / CHAR / VARCHAR,则不仅是合法语法,还需要语法数据类型

但是我必须警告你

  

the mysql_ database extension,它   不推荐使用(在PHP7中永远消失)特别是如果您只是学习PHP,请花费精力学习PDO数据库扩展。   Start here非常简单

  

您的脚本面临SQL Injection Attack的风险   看看Little Bobby Tables偶然发生了什么   if you are escaping inputs, its not safe!   使用prepared statement and parameterized statements

答案 1 :(得分:0)

不要使用引号arround表名或使用反引号

   mysql_query("INSERT INTO $tablename (episode_name,episode_title,episode_date)
    values ('$videoname','$videotitle','$date')");

答案 2 :(得分:0)

"INSERT INTO `$tablename` (episode_name,episode_title,episode_date) values ('$videoname','$videotitle','$date')";

OR

"INSERT INTO `".$tablename."` (episode_name,episode_title,episode_date) values ('$videoname','$videotitle','$date')";