晚上好..
我发布的表单的值包含数据库中列的编号(而不是它的名称),所以我想更新列名所引用的字段,
这是我的代码:
$hours=$_POST['hour'];
$date=$_POST['date'];
$s=$_POST['subject'];
$res=mysql_query("UPDATE study SET [$s] ='$hours' WHERE day='$date' ");
其中$ s是一个等于所需列数的整数。但它不起作用。那么有没有办法用它的数字而不是它的名字来引用一列?
答案 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']);