[英]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.