2012-04-19 19 views
0

我在這段代碼上沒有做任何事,它曾經工作過一次。現在它給了我這個錯誤。SQL語法問題(相同的一段代碼,給我一個錯誤!我不明白。)

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 ' `main` = 'yes', `cat` = '' `marka`.`id` ='39'' at line 1 

在我的PHP代碼是這樣的

$updatenews = mysql_query(
"UPDATE `newcnlco_atakomdb`.`marka` 
    SET `title` = '".mysql_escape_string($title)."', 
`name` = '".mysql_escape_string($name)."', 
`text` = '".mysql_escape_string($text)."', 
`url` = '".mysql_escape_string($url)."', 
`main` = '".mysql_escape_string($main)."', 
`cat` = '".mysql_escape_string($cat)."' 
    WHERE `marka`.`id` ='".$markaid."'" 
) 
or die ('Error: '.mysql_error()); 

if($updatenews) { 
    echo "<br/>"; 
    echo '<div id="alert">Marka degisildi!</div>'; 
} else { 
    echo "error 1"; 
} 

老實說,我不明白什麼變化,爲什麼我收到錯誤。請幫幫我。

+3

你能發佈在運行時生成的查詢字符串嗎? – 2012-04-19 07:34:34

+0

這是編寫/執行查詢的可怕方法。使用準備好的語句,它們更好,更清晰。 – 2012-04-19 07:35:31

+0

你試過在'='「。$'markaid。'''(在最後的'''之前添加';')嗎? – 2012-04-19 07:36:23

回答

2

從你的錯誤看起來,你的一個變量包含一個單引號,很可能是cat

http://php.net/manual/en/function.mysql-escape-string.php,該函數mysql_escape_string功能depreceated與http://www.php.net/manual/en/function.mysql-real-escape-string.php

更換。此外,他們只用一個轉義\"更換",所以這給查詢。你也不應該引用數字,所以刪除任何INTEGER字段的引號。這是因爲包含數字的字符串並不總是與數字本身相同。這給

$updatenews = mysql_query(' 
    UPDATE `newcnlco_atakomdb`.`marka` SET 
     `title` = "'.mysql_real_escape_string ($title).'", 
     `name` = "'.mysql_real_escape_string ($name).'", 
     `text` = "'.mysql_real_escape_string ($text).'", 
     `url` = "'.mysql_real_escape_string ($url).'", 
     `main` = "'.mysql_real_escape_string ($main).'", 
     `cat` = "'.mysql_real_escape_string ($cat).'" 
    WHERE `marka`.`id` ='.$markaid 
) or die ('Error: '.mysql_error()); 

此外,我希望所有的輸入檢查/消毒,包括NUMERICS(http://bobby-tables.com/

編輯以下意見你的「貓」的值是數字,默認爲空字符串,因此需要禁制即

$cat = (is_numeric($cat))?$cat:0; 
$updatenews = mysql_query(' 
    UPDATE `newcnlco_atakomdb`.`marka` SET 
     `title` = "'.mysql_real_escape_string ($title).'", 
     `name` = "'.mysql_real_escape_string ($name).'", 
     `text` = "'.mysql_real_escape_string ($text).'", 
     `url` = "'.mysql_real_escape_string ($url).'", 
     `main` = "'.mysql_real_escape_string ($main).'", 
     `cat` = '.$cat.' 
    WHERE `marka`.`id` ='.$markaid 
) or die ('Error: '.mysql_error()); 
+0

我仍然得到相同的錯誤。這使我瘋狂:( – 2012-04-19 07:49:12

+0

請提供每個產生錯誤的$變量的值$ – 2012-04-19 07:50:04

+0

$ title - 嘗試 $ name - 嘗試 $ text-嘗試嘗試嘗試嘗試嘗試 $ url - www.trying.com $主要 - 是 $ cat - empty *因爲它的主分類db輸入0作爲默認 – 2012-04-19 07:52:17

-1

我想你失蹤後一個逗號:

`cat` = '' 

編輯:看樣子WHERE缺少錯誤消息,因此看上去彷彿它需要

`marka`.`id` ='39' 
之前另一個逗號
+0

它是WHERE之前的最後一個,它需要一個逗號? – 2012-04-19 07:34:00

+0

不,'\'cat \'='''是最後一個賦值 - 只有當在同一語句中進一步賦值時才需要',' – 2012-04-19 07:34:30

+1

看看錯誤信息:'' 'main' ='yes','cat' ='''marka'.'id' ='39''' – Widor 2012-04-19 07:35:13

0

試試這個:

$updatenews = mysql_query(
" UPDATE newcnlco_atakomdb.marka 
    SET title = '".mysql_escape_string($title)."', 
    name = '".mysql_escape_string($name)."', 
    text = '".mysql_escape_string($text)."', 
    url = '".mysql_escape_string($url)."', 
    main = '".mysql_escape_string($main)."', 
    cat = '".mysql_escape_string($cat)."' 
    WHERE marka.id ='".$markaid."' " 
) 
+0

所有你已經完成的是刪除了'標記。它們對錶/數據庫名稱是完全有效的。 – 2012-04-19 08:10:56