簡體   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