【问题标题】:Updating a column by referring to it with its number通过引用列的编号来更新列
【发布时间】:2013-05-12 01:37:31
【问题描述】:

晚上好.. 我正在发布一个表单,其值包括数据库中列的编号(而不是名称),所以我想更新列名称所指的字段,
这是我的代码:

$hours=$_POST['hour'];
$date=$_POST['date'];
$s=$_POST['subject'];
$res=mysql_query("UPDATE study SET [$s] ='$hours' WHERE day='$date' ");

其中 $s 是一个整数,等于所需列的编号。但它不起作用。那么有没有办法通过列的编号而不是名称来引用列?

【问题讨论】:

  • 请显示SHOW CRATE TABLE study 返回的内容。
  • 所有 SQL 命令都需要列名,而不是数字。
  • ok .. 我想我必须先运行一个查询才能根据其编号获取列名.. 那会是 mysql_field_name 吗?
  • 为什么需要按编号引用列。这听起来像是糟糕的设计 - 以及潜在的安全漏洞。

标签: php mysql


【解决方案1】:

根据This question,看来您只能通过使用information_schema 表来做到这一点。

【讨论】:

    【解决方案2】:

    添加一个 autoincrement 列,将行的唯一编号携带到现有表中

     ALTER TABLE mytable ADD idnum INT NOT NULL AUTO_INCREMENT;
    

    (或在新表中添加字段

    CREATE TABLE mytable (
      idnum INT NOT NULL AUTO_INCREMENT,
     ... )
    

    并将idnum设置为PRIMARY KEY。

    这样所有行都有一个由 MySQL 自动创建的唯一编号。要插入一行,请将字段设置为 null,MySQL 会自动设置数字

    INSERT INTO mytable (idnum, ...) VALUES (null, ...);
    

    请注意,由于 PHP API,您可以检索 MySQL 自动设置的 idnum,例如 mysqli (see this page),

    $lastid = $mysqli->insert_id(); // $mysqli being the mysqli object
    

    然后要更新一个值,你必须存储在某个地方(最好在 session 中而不是在页面上 [因为在这种情况下用户可以修改它 - 除非没关系])

    // Modify field form
    ...SELECT idnum,nhours FROM mytable WHERE thedate = ...
    $_SESSION['idnum'] = $row['idnum'];
    ...
    // Display form ...
    
    // Form processing
    // Check first if SESSION has an idnum (an other parameters) in case the user hacked the page and submit a "special" form ...
    /// Then
    $res=mysql_query("UPDATE study SET nhours='$hours' WHERE idnum=" . $_SESSION['idnum']);
    

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 2021-09-22
      • 2021-12-13
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多