Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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_Set_Add - Fatal编程技术网

如何在不知道当前值的情况下向php中的MySQL集合类型添加一个可能值

如何在不知道当前值的情况下向php中的MySQL集合类型添加一个可能值,php,mysql,set,add,Php,Mysql,Set,Add,大家好,对不起我的英语 我有一个列“example”,它是集合类型。 我必须制作一个php页面,您可以在其中向该列添加值 首先,我需要知道“示例”中的内容,以防止控件添加现有值。其次,我需要添加新的值 这是我想做的 //I just made the connection to the db in PDO or MySQLi $newValue=$_POST['value']; //I take the value to add in the possible values from a for

大家好,对不起我的英语

我有一个列“example”,它是集合类型。 我必须制作一个php页面,您可以在其中向该列添加值

首先,我需要知道“示例”中的内容,以防止控件添加现有值。其次,我需要添加新的值

这是我想做的

//I just made the connection to the db in PDO or MySQLi
$newValue=$_POST['value']; //I take the value to add in the possible values from a form
//Now I have to "extract" all the possible values. Can't think how.

//I think I can store the values into an array
$result=$sql->fetch();  //$sql is the query to extract all the possible values from "example"

//So now i can do a control with a foreach
foreach($result as $control){
     if ($newValue == $control){
          //error message, break the foreach loop
     }
}
//Now, if the code arrives here there isn't erros, so the "$newValue" is different from any other values stored in "example", so I need to add it as a possible value
$sql=$conn->query("ALTER TABLE 'TableName' CHANGE 'example' 'example' SET('$result', '$newValue')"); //<- where $result is the all existing possible values of "example"
//我刚刚在PDO或MySQLi中连接到数据库
$newValue=$_POST['value']//我从表单中获取要添加的可能值
//现在我必须“提取”所有可能的值。想不出怎么办。
//我想我可以将值存储到数组中
$result=$sql->fetch()//$sql是从“示例”中提取所有可能值的查询
//现在我可以用foreach做一个控件
foreach($结果为$控制){
如果($newValue==$control){
//错误消息,中断foreach循环
}
}
//现在,如果代码到达这里没有错误,那么“$newValue”与存储在“example”中的任何其他值都不同,因此我需要将其添加为可能的值

$sql=$conn->query(“ALTER TABLE'TableName'CHANGE'example'example'SET(“$result',“$newValue”)”)// 如果您需要一个集合类型-您应该知道您添加了哪些值。否则,只需使用VARCHARtype

我们可以通过查询
信息\u schema.columns

假设该表在当前数据库中(并且假设我们在选择表名使用混合大小写时了解了
小写\u table\u name
设置)

注意集合定义中允许的元素数量限制

从末尾删除结束部分,并附加
',newval')



就我个人而言,我不太喜欢在应用程序代码中运行
altertable
。这样做将在事务中执行隐式提交,并且在执行操作时还需要独占表/元数据锁。

第一步是从PHP连接到数据库。您是在使用MySQLi还是PDO来实现这一点?我假设您没有使用常规MySQL,因为它可能已被弃用或删除,具体取决于您的PHP版本。到目前为止,你在这方面做过什么尝试吗?请更新您的问题,以显示您已经尝试过的内容,展示您的代码以及您在某个应用程序中面临的特定问题。这也有助于清楚地说明您正试图实现的目标,因为目前还不太清楚。我需要一个集合类型,我知道我添加的值,但不知道存储的值。我举了一个例子:“例子:{'Hello','World'};用户“Gianni”将“Fine”添加到集合中,因此:“示例”:{'Hello','World','Fine'};现在,另一个用户想要添加另一个值。我不知道具体哪些值在集合中,我无法控制和更新php页面每次只有几个问题。。。a) 通过information.schema,我可以得到该列的一组或所有配置的可能值?b) 我可以将结果放入数组中吗?c) 控件之后,如何将newValue放入列中?至少在概念上,我对ALTER TABLE的想法是正确的吗?a)这个问题中的查询返回一个字符串(VARCHAR),该字符串是列的列类型,它将出现在CREATE TABLE语句中。对于SET数据类型的列,您将返回类似于
SET('apple','banana','cherry')
。(information_schema.columns中的其他列包含其他属性。)b)一旦我们从数据库返回字符串,我们就可以对它执行任何操作。c) 是的,ALTERTABLE语句将是我们更改列定义的方式。注意:在集合定义中,不要更改值的顺序。。。存储行引用集合列表中的位置OK,因此,如果返回值是varchar,它是:
SET('apple','banana','cherry')
我可以使用字符串控件删除最后一个字符(“(”),然后使用查询
“ALTER TABLE”TableName“CHANGE”example“example”。$return。“,$newValue”)对吗?ALTER表应该包含完整的列定义,包括可空性、默认值、列注释等属性。在我将任何字符串包含到SQL语句的文本中之前,我会确保它可以安全地包含。。。白名单将被接受的值,通过一些检查验证它们,并正确地转义值。。。(考虑一个包含单引号的
$newValue
,或单引号与逗号、括号的组合,例如“
abc'der'p
”或例如“
ab”“,”c”“)或“derp
”,因此,由于事情的复杂性,我采用了不同的方法来解决我的问题。谢谢你的帮助,不要怀疑,我会研究和学习这个东西的设置,以使用它在一个可能的未来。
 SELECT c.column_type 
   FROM information_schema.columns c
  WHERE c.table_schema = DATABASE()
  WHERE c.table_name   = 'TableName'
    AND c.column_name  = 'example'