2015-12-03 2 views
0

Так в течение долгого времени этот код работал, но теперь все вдруг я получаю эту ошибку:PHP ошибка синтаксиса SQL MYSQL UPDATE

Ошибка: У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' j_users 'SET patient =' ', year =' ', gender =' ', age =' ', height =' Select a 'at line 1

HELP!

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

Идентификаторы разделены символом '\' '(« тик »на' '' '), а не' '' (single-quote/apostraphe) – Uueerdo

+0

Также рассмотрите параметризованные запросы; который будет разбиваться в первый раз, когда имя имеет '' 'в нем. – Uueerdo

+0

mysqli, подготовленные заявления или pdo – Drew

ответ

0

Непосредственная причина ошибки, как отметило Uueerdo в комментарии является некорректными символами (одиночные кавычки вместо кавычки) в кавычках названия таблицы - что в данном случае делает не нужно указывать вообще, поскольку он исправлен и не содержит специальных символов.

В коде есть другие проблемы, которые мы сейчас оставим в покое, поскольку они не сразу влияют на проблему, но я обновлю ответ, если OP заинтересован в других вещах, которые было бы полезно исправить.

UPDATE - вещи исправить:

  • Как отметил Дрю и Uueerdo в комментариях, мигрируют из устаревших mysql_ интерфейса mysqli_ или PDO.
  • Значения, введенные пользователем, должны быть экранированы с помощью mysql_real_escape_string() (с текущим интерфейсом), mysqli_escape_string() или с помощью держателей параметров PDO (?) в зависимости от интерфейса, но не с htmlspecialchars(). Если требуется экранирование HTML, это должно быть сделано непосредственно перед тем, как HTML будет отображаться, а не в то время, когда он хранится в базе данных.
  • Обратите внимание, что большинство ваших входных имен соответствуют именам столбцов базы данных. Таким образом, вам может быть лучше избавиться от полей из базы данных через SHOW FIELDS один раз в жестко запрограммированный массив, отредактировав его, чтобы исключить нерелевантные (другой вариант, чтобы извлечь его динамически и исправить массив после его получения) и добавить некоторые логику для устранения исключений, таких как height и height_inches, поскольку вы перебираете массив и генерируете запрос в цикле. Таким образом, код становится более гибким и более простым в обслуживании.
  • Создайте интерфейс оболочки для доступа к базе данных, а не напрямую обращайтесь к API MySQL. Этот способ должен возникнуть необходимость изменить интерфейс (например, mysql_ до mysqli), это вопрос фиксации нескольких вызовов только в одном модуле, а не в изменении основного кода. Вы также можете добавлять такие вещи, как ведение журнала запросов, автоматический запрос EXPLAIN в режиме трассировки, время выполнения и все, что вы могли бы подумать в отношении ваших запросов, довольно просто.
+0

Да, меня интересовали бы другие вещи, которые было бы полезно исправить –