【问题标题】:PHP - Insert into table with name of previous select statement resultPHP - 以先前选择语句结果的名称插入表中
【发布时间】:2013-11-23 18:16:47
【问题描述】:

我正在尝试插入到 mySql 表中,表名是 sql select 查询的结果,第一个查询返回正确的结果,但第二个查询似乎是错误所在,任何帮助都会非常非常非常感谢

$query = mysql_query("SELECT council from users where username = '$username'");

 $x = mysql_result($query,0, "council");
 $councilArea = (string)$x;


// mysql inserting a new row
    $result = mysql_query("INSERT INTO '$councilArea' ('barcode', 'productname', 'bin', 'info', 'addedby') VALUES('$barcode', '$productname', '$bin', '$info', '$username')");

【问题讨论】:

  • 单引号引起的错误'$councilArea' 和所有列名如'barcode' 请参阅stackoverflow.com/questions/11321491/…。不应引用表名和列名(除非它们是保留字,需要反引号)
  • 但这也说明你的数据库设计存在更大的问题。与其存储保存相关信息的表的 name,不如将列存储在作为外键的单个表中。换句话说,你的设计意味着你有几个相似的表,而你应该有一个表,其中包含一个可以执行连接查询的不同列。
  • 这是 JSON 响应的一部分,它继续执行 if 语句检查结果是否已填充,如果没有,则返回不成功,每次都返回不成功并且数据库中没有填充任何内容。
  • 最后,查看how can I prevent SQL injection in PHP。您使用已弃用的 mysql_*() 扩展名可能不安全。
  • @Michael 对不起,我在答案中写了你在评论中输入的内容,但我没有复制到你的 cmets 上,

标签: php mysql sql json


【解决方案1】:

您收到错误是因为表名不能用单引号引起来,而应该用反引号引起来。

您的数据库设计也存在一个根本问题。 您将数据保存在不同的表中,实际上应该将它们存储在一个表中。 在表中添加一个字段counselArea来区分数据,而不是将其存储在不同的表中。

【讨论】:

  • 嗨,谢谢。该设计仅用于原型。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 2016-08-21
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多