繁体   English   中英

用PHP和MySQL修改表,添加带有'@'符号的列

[英]Alter table with PHP and MySQL, add a column with an '@' sign

我正在尝试检查表中是否有特定的列,如果没有,则将该列添加到其中。 只要输入值没有@符号,我的代码就可以正常工作。 我已经尝试在'$ 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中获取的,即使使用@符号输入也可以在其中工作

谢谢你的帮助!

在进行其他操作之前, 考虑以其他方式执行此操作。 您将为每封电子邮件在表中添加一个字段-您可能不知道的是,这会通过增加行的大小来增加表的大小,并且还会将您限制为固定数量的字段( 此链接很明显突出显示每行最多65535个字节。每个VARCHAR字符(取决于字符集)在3到8个字节之间)

您的请求失败的真正原因是@是SQL查询中的特殊字符,而phpmyadmin恰好足够聪明,可以对其进行转义。 @表示MySQL使用的SQL方言中的变量。 您可以对MySQL进行反引号转义,也可以退出使用此表,而转而支持这样的表结构:

 selection:
  * id
  * your metadata here

 emails:
  * id
  * email_address

 selection_emails:
  * id
  * selection_id
  * email_id

第三个表称为关联表。 它使您可以继续规范化数据。

您可以使用大括号{$email}{$email}括起来,以将其明确定义为字符串中的变量,但是在此之前,您可能还需要在此变量中转义奇数字符。

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

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

我还要问您为什么要添加电子邮件作为新列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM