通过引用它的编号来更新列

时间:2013-05-12 01:37:31

标签: php mysql

晚上好.. 我发布的表单的值包含数据库中列的编号(而不是它的名称),所以我想更新列名所引用的字段,
这是我的代码:

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

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

2 个答案:

答案 0 :(得分:0)

根据This question,您似乎只能使用information_schema表格来执行此操作。

答案 1 :(得分:0)

添加自动增量列,其中包含行的唯一编号到现有表

 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, ...);

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

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

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

// 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']);