使用PHP和MySQL更改表格,添加带有“@”符号的列

时间:2013-06-15 23:32:41

标签: php mysql

我正在尝试检查表中是否有某个列,如果没有将该列添加到其中。只要输入值没有@符号,我的代码似乎工作正常。我试过周围 “$电子邮件” 使用和不使用单引号作为输入字符串。任何帮助都会非常感激。

$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,即使使用@符号输入

也似乎在那里工作

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

您的请求失败的真正原因是因为@是SQL查询中的特殊字符,而phpmyadmin恰好足以逃脱它。 @表示MySQL使用的SQL方言中的变量。你可以为MySQL调用它的反引号 - 或者你可以退出使用它来支持这样的表结构:

 selection:
  * id
  * your metadata here

 emails:
  * id
  * email_address

 selection_emails:
  * id
  * selection_id
  * email_id

第三个表称为关联表。它允许您继续规范化数据。

答案 1 :(得分:0)

您可以用大括号{$email}包围电子邮件,将其明确定义为字符串中的变量,但在此之前您可能还需要在此变量中转义奇数字符。

当改变表格时,你也应该用反向标记围绕它,以允许奇数字符。

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

我还会质疑为什么要将电子邮件添加为新列。