2011-02-27 55 views
1

我是MySQL的新手。我試圖做的似乎並不難,但我無法弄清楚。MySQL在插入前刪除空格

我想做2件事,目前只有一件工作。首先,我想將新條目的值複製到同一張表的另一列中。這工作。第二,我想看看這個新的條目,然後從這個新的,複製的值刪除所有空格,並將其替換他們_

這是我目前:

<?php 

$con = mysql_connect("localhost","username","password"); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("testdb", $con); 

$sql="INSERT INTO testtable (name, type, rating, name_copy) 
VALUES ('$_POST[name]','$_POST[type]','$_POST[rating]','$_POST[name]')"; 
mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE('name_copy', ' ', '_')"); 
if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
header('Location: http://dev.test.com/records.php') ; 
mysql_close($con) 

?> 

注意,複製的名稱價值,我張貼了兩次。一旦到了名稱列,並且一次到了name_copy列。不知道這是否是複製該值的最佳方法。 本質上,我試圖做到這一點的原因是,我可以通過刪除空格從這些值生成URL。

任何幫助表示讚賞!

謝謝。

+0

你沒有說你得到了什麼錯誤。你爲什麼說它不起作用? –

+5

Little Bobby Tables會喜歡你的網站。 – ThiefMaster

+0

爲什麼你只在需要時使用2個查詢? – 2011-02-27 02:18:52

回答

0
mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE('name_copy', ' ', '_')"); 

來自各地的列名取下單引號或將其更改爲反引號:

mysql_query("UPDATE 'testtable' SET `name_copy` = REPLACE('name_copy', ' ', '_')"); 

不過我建議在您的解決方案無論是在插入或至少限制更新詢問這樣做(這遍歷每個插頁上的所有行)。

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ". 
     "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')"; 

順便說一句,不要忘記插入數據庫之前轉義變量!搜索它,如果你不知道如何,這是一個經常被問到的問題。


編輯:

<?php 

$con = mysql_connect("localhost","username","password"); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("testdb", $con); 

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ". 
     "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')"; 
if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
header('Location: http://dev.test.com/records.php') ; 
mysql_close($con); 

?> 
+0

我不知道如何實現這個,因爲這已經刪除了$ _POST語句,並且在它們的位置有變量。當這樣做時,我得到的錯誤告訴我他們都沒有定義。我需要刪除空格的唯一字段是name_copy字段。我需要存儲它。 – Freddie

+0

@Freddie,據我瞭解,你的name_copy字段與名稱保持相同的文本,只有修剪和空格轉換爲下劃線。我已經替換了$ _POST變量,因爲您不能簡單地將POST變量放入查詢中,出於安全原因(搜索sql注入)。你必須引用它們(並且我還建議在輸入數據庫之前檢查輸入的正確性)。例如,不要將'$ _POST ['name']'直接放到查詢字符串中,而是使用'mysql_real_escape_string($ _ POST ['name'])''。 – Czechnology

0

您在INSERT之前應用此更新。因此,您新插入的行永遠不會更新以刪除空格。此外,您應該刪除列名稱周圍的單引號。

0

你應該做的是:

  1. 啓用適當的PHP錯誤處理。至少設置error_handling(E_ALL)並編寫一個錯誤處理程序,該錯誤處理程序將錯誤輸出到日誌文件並導致頁面停止。目前,您完全忽略了錯誤的可能性,因此「正在充電淹沒災難」。我個人會使用PDO並將PDO :: ATTR_ERRMODE設置爲PDO :: ERRMODE_EXCEPTION。

  2. 瞭解SQL注入以及您的頁面如何受到攻擊(請參閱其他人的評論)。當你明白這一點時,你可能會想要使用參數化查詢(PDO可以做到這一點 - 見我的第一點)。

  3. 試着在你的腦海中決定你真的想要做什麼。

我認爲在頁面中對變量進行字符串替換就足夠了,然後使用這些參數作爲插入參數。沒有必要插入一行,然後更新它(或者事實上,正如你試圖做的那樣,更新表格中的每一行!)