使用PHP和MySQL更改表,添加一个带有'@';签名

使用PHP和MySQL更改表,添加一个带有'@';签名,php,mysql,Php,Mysql,我试图检查表中是否有某一列,如果没有,则将该列添加到表中。只要输入值没有@符号,我的代码就可以正常工作。我已经试过了 “$email” 使用和不使用单引号作为输入字符串。任何帮助都将不胜感激 $email = strtolower(mysql_real_escape_string($_SESSION['email'])); $result = mysql_query("SHOW COLUMNS FROM `selections` LIKE '$email'",$conn); $exists =

我试图检查表中是否有某一列,如果没有,则将该列添加到表中。只要输入值没有@符号,我的代码就可以正常工作。我已经试过了 “$email” 使用和不使用单引号作为输入字符串。任何帮助都将不胜感激

$email = strtolower(mysql_real_escape_string($_SESSION['email']));
$result = mysql_query("SHOW COLUMNS FROM `selections` LIKE '$email'",$conn);
$exists = (mysql_num_rows($result))?TRUE:FALSE;

if ($exists == FALSE) {
$query2 = "ALTER TABLE  selections ADD  $email VARCHAR( 120 ) NOT NULL";
$add= mysql_query($query2,$conn);
var_dump($query2);
echo("this error". mysql_error());
}    
$query2直接从phpmyadmin获取,即使使用@符号输入,它似乎也能在那里工作


谢谢你的帮助

您可以将电子邮件用花括号括起来
{$email}
将其显式定义为字符串中的变量,但在此之前可能还需要转义此变量中的奇数字符

更改表格时,还应在表格周围加上反勾号,以允许出现奇数字符

最好的方法是使用参数化查询,并删除不推荐使用的mysql库。也不允许在字段名中使用奇数字符


<>我也会问你为什么把电子邮件作为一个新的栏目添加进来。

之前,请,<强>请< /强>以另一种方式考虑这一点。您将为每封电子邮件向表中添加一个字段-您可能不知道的是,这会通过增加行的大小来增加表的大小,并且还将您限制为固定数量的字段(清楚地突出显示每行最多65535字节。每个VARCHAR字符(取决于字符集)介于3到8字节之间)

请求失败的真正原因是,
@
是SQL查询中的一个特殊字符,而phpmyadmin恰好足够聪明,能够逃脱它
@
表示MySQL使用的SQL方言变量。您可以使用backtick escape for MySQL,也可以放弃使用它,转而使用如下表结构:

 selection:
  * id
  * your metadata here

 emails:
  * id
  * email_address

 selection_emails:
  * id
  * selection_id
  * email_id

第三个表称为关联表。它允许您不断规范化您的数据。

您所说的@sign input是什么意思?哈哈,奇怪,似乎您正在尝试将电子邮件存储为列而不是行。。。??如果是这样的话,那就是一个时髦的新手错误;)有效命名的MySQL文档: