2012-04-25 55 views
0

實際上,我所試圖做的是輸入類似於此字符串 一個字符串轉換爲MySQL(這是一條線,爲便於閱讀做成二)如何從PHP輸入特殊字符到MySQL?

fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1px; 
stroke-linecap:butt;stroke- linejoin:miter;stroke-opacity:1 

MySQL允許我使用插入串到現場phpMyAdmin和phpMyAdmin的添加字段(又一行,爲便於閱讀,製作成二):

('fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke- 
linecap:butt;stroke-linejoin:miter;stroke-opacity:1'' in ''field list') 

隨着我的PHP代碼,我試圖在字段列表部分添加到我的代碼如下

$rectangle_array[$rstyle] = $rectangle_array[$rstyle] . "' in ''field list'"; 
$mysql_rectangle_table_entry = "INSERT INTO $mysql_table VALUES 
           ($rectangle_array[$rstyle], 'rect', 
           $rectangle_array[$rid], $rectangle_array[$rwidth], 
           $rectangle_array[$rheight], $rectangle_array[$rx], 
           $rectangle_array[$ry])"; 
$run = mysql_query($mysql_rectangle_table_entry) or die(mysql_error()); 

而且在運行代碼時,我收到以下錯誤。

您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行附近使用正確的語法:#0000ff; fill-rule:evenodd; stroke:#000000; stroke-width:1px; stroke-linecap:butt; s'at line 1

我該怎麼做才能做到這一點?

+6

[mysql_real_escape_string](http://php.net/mysql_real_escape_string)。另外,每個值應該用單引號括起來,因爲它們是字符串(我認爲)。 – drew010 2012-04-25 18:49:08

+4

停止使用mysql_query並通過將字符串混搭在一起來構建SQL查詢。 http://bobby-tables.com/ – Quentin 2012-04-25 18:50:15

+1

print'$ mysql_rectangle_table_entry;'並查找語法錯誤或在此發佈 – miro 2012-04-25 18:50:47

回答

2

正如評論指出...

你可以使用mysql_real_escape_string()插入之前轉義任何MySQL的特殊字符。

例如:

$sql = "INSERT INTO my_table (string_column) VALUES ('" . mysql_real_escape_string($string) . "')"; 

另一種選擇是使用Prepared Statements PHP的MySQLiPDO

+1

Downvoter關心分享? – 2012-04-25 18:56:42

+0

我沒有投票,但我會upvote這個答案,因爲爲逃避字符串的問題的目的是好的 - 但是OP應該知道的漏洞,如果輸入來自未知的最終用戶 - [PDO ](http://php.net/manual/en/book.pdo.php)ftw – TerryProbert 2012-04-25 19:03:32