2010-08-13 31 views
1

我在我的LAMP服務器上遇到了一些SQL語法/轉義變量的問題。php,MySQL和變量包含å,ä和ö轉義問題

我想使用的命令如下:

$sql=mysql_query("INSERT INTO '$table' (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, Price, Retailer, Checksum) 
VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[startdate]','$_POST[timestroke]','$duedate','$_POST[duration]','$price','$_SESSION[name]','$random')"); 

的問題是,有時$表變量包含象,A型和O字符。 因此我需要在$ table周圍放置''以確保它保持不變。但是這樣做時收到錯誤:

"Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''tablename' (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, P' at line 1".

貌似由「逃避」產生了一個問題。 我試着用mysql_real_escape_string替換查詢:

"$sql=sprintf("INSERT INTO '".mysql_real_escape_string($table)."' (FirstName, [...]" 

但那不幫我滿意。 有沒有辦法保持變量中的數據完好無損,仍然能夠運行查詢?或者我必須接受å,ä,ö被禁止使用php/MySQL嗎?

回答

2

這是做字符編碼。退房http://www.sitepoint.com/blogs/2006/03/15/do-you-know-your-character-encodings/


header('Content-Type: text/html; charset=utf-8');

頁面

的頂部也可以嘗試插入之前做mysql_set_charset('utf8'); /從數據庫讀取。那麼你應該把那調職到PHP文件的形式在以下方面:

<form action="/your-post-controller.php" method="post" accept-charset="utf-8"> 

通知的接收字符集=「utf-8 - 這是非常重要的,否則你的頭會到PHP文件報告其LATIN1

它應該工作,然後

而且看看http://www.phpwact.org/php/i18n/charsets - 試圖找到鏈接,絕對值得任何人感興趣的是得到正確的編碼字符讀,看到Iñtërnâtiônàlizætiøn字符串測試您的PHP & MySQL表格

+0

謝謝!讀它吧! – xeet 2010-08-13 15:54:33

+0

謝謝! NIce,但現在我正在從數據庫中獲取所有內容的奇怪字符。 現在,我必須轉換數據庫才能從表中獲取信息,然後在表單中重用它? – xeet 2010-08-13 18:03:38

+0

表中的字符編碼是什麼?你能舉出一些「奇怪的人物」的例子,他們應該是什麼樣的人。 – 2010-08-13 18:16:32

1

您將使用反引號(`)來圍繞表名稱。無關的字符編碼:

$sql=mysql_query("INSERT INTO `$table` (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, Price, Retailer, Checksum) 
VALUES ('{$_POST['firstname']}','{$_POST['lastname']}','{$_POST['startdate']}','{$_POST['timestroke']}','$duedate','{$_POST['duration']}','$price','{$_SESSION['name']}','$random')"); 

幾個方面的筆記這裏:

答:你應該從未知源來在任何輸入用戶mysql_real_escape_string避免有人破壞與SQL數據庫注射。 B:你應該使用'around數組聯想索引,原因是這些都會拋出未定義的常量(或者某件事)錯誤。這將填補你的錯誤日誌,並使你發現更多的關鍵錯誤有點難,如果你需要回去。

+0

感謝您的回覆,但反引號並未解決問題。這與根本不使用刻度相同。 å,ä和ö全部扭曲並由一串奇怪的字符替代。 還有其他建議嗎?同時我閱讀了字符編碼。 :) – xeet 2010-08-13 15:54:08

+0

反引號是您的查詢問題的一部分。但是,是的,您需要將字符集更改爲UTF8,這是我的猜測,因爲它現在可能是拉丁文的一些版本。 – 2010-08-13 15:57:47

+0

插入雙引號字符串時,不能在散列引用上使用單引號,除非用'{}'包圍數組引用。右:'「$ _POST [firstname]」'。右:「{'$ _POST ['firstname']}」'。錯誤:'「$ _POST ['firstname']」'(解析錯誤:未預期的T_ENCAPSED_AND_WHITESPACE)。 – 2010-08-13 16:51:55

相關問題