Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不删除行或记录的情况下重命名和删除mysql列名?_Php_Mysql - Fatal编程技术网

Php 如何在不删除行或记录的情况下重命名和删除mysql列名?

Php 如何在不删除行或记录的情况下重命名和删除mysql列名?,php,mysql,Php,Mysql,不管我怎么做,在重命名或删除列之后,表的所有记录都会被删除。我做错了什么 以下是重命名列名的尝试每次尝试同时执行两列操作: //method 1 (doesn't work) ALTER TABLE products_jobs CHANGE COLUMN ".$old_name." ".$new_name." VARCHAR(255) NOT NULL, CHANGE COLUMN ".$old_price." ".$new_price." VARCHAR(255) NOT NULL; //m

不管我怎么做,在重命名或删除列之后,表的所有记录都会被删除。我做错了什么

以下是重命名列名的尝试每次尝试同时执行两列操作:

//method 1 (doesn't work)
ALTER TABLE products_jobs CHANGE COLUMN ".$old_name." ".$new_name." VARCHAR(255) NOT NULL, CHANGE COLUMN ".$old_price." ".$new_price." VARCHAR(255) NOT NULL;

//method 2 (doesn't work)
ALTER TABLE products_jobs MODIFY COLUMN ".$old_name." ".$new_name." VARCHAR(255) NOT NULL, MODIFY COLUMN ".$old_price." ".$new_price." VARCHAR(255) NOT NULL;

//method 3 (doesn't work)
ALTER TABLE products_jobs ADD ".$new_name." VARCHAR(255) NOT NULL AFTER qty;
UPDATE products_jobs SET ".$new_name." = CASE WHEN ".$old_name." THEN 1 ELSE 0 END;
ALTER TABLE products_jobs DROP COLUMN ".$old_name.";
ALTER TABLE products_jobs ADD ".$new_price." VARCHAR(255) NOT NULL AFTER qty;
UPDATE products_jobs SET ".$new_price." = CASE WHEN ".$old_price." THEN 1 ELSE 0 END;
ALTER TABLE products_jobs DROP COLUMN ".$old_price.";

//method 4 (doesn't work)
ALTER TABLE products_jobs ADD ".$new_price." VARCHAR(255) NOT NULL AFTER qty, ADD ".$new_name." VARCHAR(255) NOT NULL AFTER qty;
UPDATE products_jobs set ".$new_price." = ".$old_price.", ".$new_name." = ".$old_name.";
ALTER TABLE products_jobs DROP COLUMN ".$old_price.", DROP COLUMN ".$old_name.";
这是我尝试过的删除方法。我不确定这是怎么写的,所以我没有尝试更多的这种方式。同样,它同时做两列

ALTER TABLE products_jobs DROP COLUMN ".$old_name.", DROP COLUMN ".$old_price.";
所以所有这些都可以在重命名和删除列时起作用,但问题是表的所有记录都被删除了,这是不好的。需要我的所有行/记录保持完整。不确定这是否重要,但表类型/引擎是innodb,而不是myisam

更新

我发现里面有额外的代码,它引用了错误的数据库。数据库变量不正确。一旦我纠正了它,我上面的问题就消失了。这是让我困惑的代码

$sql = mysql_query("SELECT COUNT(*) totalColumns FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".$database."' AND table_name = 'products_jobs'");
$row = mysql_fetch_assoc($sql);
$totalcolumns = $row['totalColumns'];
if ($totalcolumns < 4) {
    $sql = mysql_query("DELETE FROM products_jobs");
}
根据MySQL手册:

ALTER TABLE t1 CHANGE a b INTEGER
可以使用“更改旧列名称”“新建列名称”“列定义”子句重命名列。为此,请指定新旧列名以及该列当前的定义

资料来源:

那么,在你的情况下

ALTER TABLE products_jobs CHANGE ".$old_name." ".$new_name . " VARCHAR(255)"

请注意,您的SQL易受SQL注入的攻击。

我认为可能导致您以前尝试失败的是“notnull”描述符。我想让您参考这个类似问题的答案:

这些php变量的值是什么?除非注入sql,否则这些语句都不应该删除任何行。它们可能是许多不同的东西,但其中一个例子是Variable_List_name代表name one,Variable_List_price代表price one。可能是外键发现了这一点,而这与alter语句的编写方式无关。这是额外的代码,我有这是错误的。将更新帖子进行解释。除非他将变量作为用户输入,否则它不易受攻击,你不知道。不起作用,但我发现了我的错误,这是一个额外的代码,让我很困惑。不起作用,但我发现了我的错误,这是一个额外的代码,让我很困惑。