2015-12-03 196 views
0

所以很長一段時間這段代碼的工作,但現在所有的突然我得到這個錯誤:PHP SQL語法錯誤MYSQL UPDATE

錯誤:你在你的SQL語法錯誤;在''j_users'SET patient ='',year ='',gender ='',age ='',height ='在'line'選擇'時,檢查與您的MySQL服務器版本對應的手冊1

幫助!

define('DB_NAME', 'DATABASE'); 
define('DB_USER', 'USERNAME'); 
define('DB_PASSWORD', 'PASSWORD'); 
define('DB_HOST', 'localhost'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

$db_selected = mysql_select_db(DB_NAME, $link); 

if (!$db_selected) { 
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error()); 
} 



$value = htmlspecialchars($_POST['patient']); 
$value4 = htmlspecialchars($_POST['year']); 
$value5 = htmlspecialchars($_POST['gender']); 
$value6 = htmlspecialchars($_POST['age']); 
$value7 = htmlspecialchars($_POST['height']) . '.' . htmlspecialchars($_POST['height_inch']); 
$value8 = htmlspecialchars($_POST['weight']); 
$value9 = htmlspecialchars($_POST['foot_length']); 
$value10 = htmlspecialchars($_POST['sheight']) . '.' . htmlspecialchars($_POST['sheight1']); 
$value11 = htmlspecialchars($_POST['Amputation']); 

$value13 = htmlspecialchars($_POST['Side']); 

$value16 = htmlspecialchars($_POST['Flesh']); 

$value18 = htmlspecialchars($_POST['Activity']); 

$value21 = htmlspecialchars($_POST['practitioner']); 
$value22 = htmlspecialchars($_POST['phone']); 
$value23 = htmlspecialchars($_POST['email']); 

$value24 = htmlspecialchars($_POST['Account']); 
$value25 = htmlspecialchars($_POST['companyname']); 
$value26 = htmlspecialchars($_POST['streetaddress']); 
$value27 = htmlspecialchars($_POST['city']); 
$value28 = htmlspecialchars($_POST['state']); 
$value29 = htmlspecialchars($_POST['zip']); 
$value30 = htmlspecialchars($_POST['companyname2']); 
$value31 = htmlspecialchars($_POST['streetadress2']); 
$value32 = htmlspecialchars($_POST['city2']); 
$value33 = htmlspecialchars($_POST['state2']); 
$value34 = htmlspecialchars($_POST['zip2']); 
$value35 = htmlspecialchars($_POST['foot']); 

$value39 = htmlspecialchars($_POST['purchaseorder']); 
$value40 = htmlspecialchars($_POST['radio']); 
$value41 = htmlspecialchars($_POST['lightflesh2']); 
$value42 = htmlspecialchars($_POST['darkfleah2']); 
$value43 = htmlspecialchars($_POST['foamcalf']); 
$value44 = htmlspecialchars($_POST['additional']); 
$value45 = htmlspecialchars($_POST['Sock1']); 
$value46 = htmlspecialchars($_POST['Sock2']); 
$value47 = htmlspecialchars($_POST['Sock3']); 
$value48 = htmlspecialchars($_POST['day']); 

//$sql = "INSERT INTO order_form (patient, newamputee, yearamputee, year, gender, age, height, weight, foot_length, sheight, ak, bk, left1, right1, bilateral, light_flesh, dark_flesh, k2, k3, k4, k4_extrme, practitioner, email, Account, companyname, streetaddress, city, state, zip, companyname2, streetaddress2, city2, state2, zip2, UltraStride, ActiveStride, NaturalStride, K2_ComfortStride, purchaseorder, radio, lightflesh2, darkfleah2, foamcalf, additional, Sock1, Sock2, Sock3, ground, thirdday, twoday, nextday) VALUES ('$value', '$value2', '$value3', '$value4', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '$value13', '$value14', '$value15', '$value16', '$value17', '$value18', '$value19', '$value20', '$value21', '$value22', '$value23', '$value24', '$value25', '$value26', '$value27', '$value28', '$value29', '$value30', '$value31', '$value32', '$value33', '$value34', '$value35', '$value36', '$value37', '$value38', '$value39', '$value40', '$value41', '$value42', '$value43', '$value44', '$value45', '$value46', '$value47', '$value48', '$value49', '$value50', '$value51')"; 


$update = "UPDATE 'j_users' 
SET patient = '$value', year = '$value4', gender = '$value5', age = '$value6', height = '$value7', weight = '$value8', foot_length = '$value9', sheight = '$value10', Amputation = '$value11', Side = '$value13', Flesh = '$value16', Activity = '$value18', practitioner='$value21', phone='$value22', email='$value23', Account = '$value24', companyname = '$value25', streetadress='$value26', city='$value27', state='$value28', zip='$value29', companyname2='$value30', streetadress2='$value31', city2='$value32', state2='$value33', zip2='$value34', foot='$value35', purchaseorder='$value39', radio='$value40', lightflesh2='$value41', darkfleah2='$value42', foamcalf='$value43', foamcalf='$value44', Sock1='$value45', Sock2='$value45', Sock3='$value46', day='$value47' 

WHERE user_login = '" . $user . "'"; 

if (!$update) { 
    die('Invalid query: ' . mysql_error()); 
} 

mysql_query($update, $link); 

if (!mysql_query($update)) { 
die('Error: ' . mysql_error()) ; 
mysql_close(); 
} 
+0

標識符由''''(''''鍵上的「tick」)分隔,而不是'''(單引號/ apostraphe) – Uueerdo

+0

另外,查看參數化查詢;這將在第一次打破名稱中包含'''的時候。 – Uueerdo

+0

mysqli,準備好的報表,或者pdo – Drew

回答

0

錯誤的直接原因,如在評論中指出Uueerdo是不正確的符號(單引號,而不是反引號)在表名的引用 - 在這種情況下做根本不需要被引用,因爲它是固定的並且不包含特殊字符。

代碼中還存在其他問題,我們現在將暫時擱置,因爲它們不會立即影響問題,但如果OP對其他問題很感興趣,我會更新答案。

更新 - 東西來解決:

  • 正如德魯和Uueerdo在評論中指出,從已過時mysql_接口遷移到mysqli_或PDO。
  • 用戶輸入的值應該用mysql_real_escape_string()(使用當前界面),mysqli_escape_string()或通過PDO參數保持器(?)進行轉義,具體取決於接口,但不能使用htmlspecialchars()。如果需要HTML轉義,則應在HTML顯示之前立即完成,而不是在存儲在數據庫中時。
  • 請注意,大部分輸入名稱都與數據庫列名稱匹配。因此,您最好將數據庫中的字段通過SHOW FIELDS一次轉換爲硬編碼數組,並對其進行編輯以排除不相關的數據(另一種選擇是動態獲取數據並在獲取數據後修復數組),然後添加一些邏輯來處理像heightheight_inches這樣的異常,因爲您在遍歷數組並在循環中生成查詢。代碼因此變得更加靈活並且更易於維護。
  • 爲您的數據庫訪問創建一些包裝接口,而不是直接訪問MySQL API。這種方式需要改變接口(例如mysql_mysqli),這只是在一個模塊中修復一些調用而不是主要的代碼改變。您還可以添加諸如查詢日誌記錄,跟蹤模式下的自動查詢EXPLAIN,性能計時以及您可能認爲與查詢有關的任何其他內容,相當容易。
+0

是的,我會對其他可以修復的東西感興趣 –