2012-07-25 43 views
1
$id = $_REQUEST["Uid"]; 

$query = "update prd set name='".$_POST['nm']."', char='".$_POST['ch']."', price='".$_POST['pr']."', sp_pri='".$_POST['spr']."', is_eli='".$_POST['enb']."', upd='".$_POST['ud']."', img='".$_FILES['img']['name']."', c_id='".$_POST['cid']."' where id=".$id; 

$r = mysql_query($query) or die(mysql_error()); 
if ($r == 1) 
    echo "Record Updated"; 

我從該查詢收到以下錯誤,但我不知道如何解決它 - SQL看起來OK我!我究竟做錯了什麼?更新字段值PHP編程

您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'char ='b',price ='150',sp_pri ='100',is_eli ='Yes',upd ='Mon Jul 23 2012 17 :23:24'at line 1

+0

請格式化你的代碼 – donald123 2012-07-25 08:24:38

+5

問好SQL注入。提示:寧願使用預準備語句,不要使用mysql_ *函數,也不要直接在請求中使用$ _POST變量。 – 2012-07-25 08:25:37

+1

另一個不使用mysql擴展的理由是不推薦使用(正如大部分[mysql手冊頁](http://php.net/mysql_connect))所暗示的。建議使用PDO和mysqli。另外,''或die(mysql_error())'不應該出現在生產代碼中,因爲['die'](http://www.phpfreaks.com/blog/or-die-must-die)會中斷HTML輸出和數據庫錯誤消息不應該透露給非管理員用戶,因爲它[披露太多信息](http://msdn.microsoft.com/en-us/library/ms995351.aspx#securityerrormessages_topic2)。 – outis 2012-07-25 08:31:51

回答

8

char是SQL中的保留字。如果你使用這樣的關鍵字作爲列名,你必須將它們放在反引號中(正如你應該總是使用列名)!

$query="update prd set `name`='".$_POST['nm']."', `char`='".$_POST['ch']."', `price`='".$_POST['pr']."', `sp_pri`='".$_POST['spr']."', `is_eli`='".$_POST['enb']."', `upd`='".$_POST['ud']."', `img`='".$_FILES['img']['name']."', `c_id`='".$_POST['cid']."' where `id`=".$id; 

此外,通過直接添加$_POST變量輸入查詢,而之前他們消毒,你打開你的系統,以任何形式的攻擊,即危及您的數據和網站。

看看mysqliPDO來規避這些問題。

1

除了Sirko的建議,在分配到外地upd這是一個日期 - 你應該使用STR_TO_DATE