0

$sql = "UPDATE SMF SET ". $NameDefect ." = '$DefectValue' WHERE Number = '$Number'";

База обрабатывает этот запрос и обновляет данные, но есть ошибка

Error updating record: 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 '= '' WHERE Number = ''' at line 1

Понимаю что где то напортачил с синтаксисом, но ни как не могу найти где?

<?php
$servername = "localhost";
$username = "e96478";
$password = "1111!";
$dbname = "1111";

if(isset($_REQUEST['Number']) && isset($_REQUEST['NameDefect']) && isset($_REQUEST['DefectValue'])) { $Number = mysql_escape_string ($_REQUEST['Number']); $NameDefect = mysql_escape_string ($_REQUEST['NameDefect']); $DefectValue = mysql_escape_string ($_REQUEST['DefectValue']); } // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }

$sql = "UPDATE SMF SET '" . $NameDefect . "' = '" . $DefectValue . "' WHERE Number = '" . $Number . "'";

if ($conn->query($sql) === TRUE) { echo "Record updated successfully"; } else { echo "Error updating record: " . $conn->error; }

{}

$conn->close(); ?>

Теперь выглядит так

<?php
$servername = "localhost";
$username = "e96478";
$password = "1111!";
$dbname = "1111";

if(isset($_REQUEST['Number']) && isset($_REQUEST['NameDefect']) && isset($_REQUEST['DefectValue'])) { $Number = mysql_escape_string ($_REQUEST['Number']); $NameDefect = mysql_escape_string ($_REQUEST['NameDefect']); $DefectValue = mysql_escape_string ($_REQUEST['DefectValue']); } // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }

$sql = <<<SQL UPDATE SMF SET {$NameDefect} = '$DefectValue' WHERE Number = $Number SQL;

if ($conn->query($sql) === TRUE) { echo "Record updated successfully"; } else { echo "Error updating record: " . $conn->error; }

{}

$conn->close(); ?>

1 Answers1

2

Имя колонки в районе SET '" . $NameDefect . "' взято в одинарные ковычки, а нужно в обратные.

Также желательно вставлять данные не строками, если тип в БД подразумевается числовой. Так, например Number вполне возможно таким и должен быть.

P.S. Вообще, чтобы не путаться в кавычках и конкатенациях, проще использовать HEREDOC. И будет проще ориентироваться. Примерно так:

$sql = <<<SQL
    UPDATE `test`
    SET `{$columnName}` = '$myValue'
    WHERE `number` = $numberValue
SQL;

P.P.S. Также надо (уже многоооо мнооогоооо леееет как) использовать подготовленные переменные для исключения SQL инъекций

  • Спасибо, что ответили. Я совсем новичок в PHP и SQL. Переписал код по вашему примеру. База продолжает обрабатывать запрос и обновлять данные, но выкидывает другую ошибку. Error updating record: 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 '' at line 3 – Александр Sep 16 '22 at 09:38
  • 1
    Это код надо дебажить ( https://ru.stackoverflow.com/a/701146/191482 ). Скорее всего у тебя пустой $DefectValue, о чём и говорит ошибка говоря про '' – Алексей Шиманский Sep 16 '22 at 09:43
  • Код работает это то и удивляет, все данные обновляются, используются все три переменные. Обновление происходит в указанном столбце на значение указанное в '$DefectValue' , все три переменных не пустые и отрабатывают в базе. Но ошибка все равно присутствует – Александр Sep 16 '22 at 10:07
  • 1
    ¯\(ツ)/¯ либо ошибка не в этой строке либо одно из двух.... советую воспользоваться отладчиком. Пока что вижу только одну причину для возникновения данной ошибки – Алексей Шиманский Sep 16 '22 at 10:13
  • При чем если я укажу явно без переменной столбец , ошибок нет. Все оставляю как было только меняю запрос на $sql = "UPDATE SMF SET 1M = '$DefectValue' WHERE Number = '$Number'"; Но мне необходимо передавать столбец именно переменой.. – Александр Sep 16 '22 at 10:18
  • То есть как только добавляю определение столбца для изменений, тут же начинает выкидывать ошибку. Возможно указание столбца через переменную обозначается каким то определенным набором кавычек? – Александр Sep 16 '22 at 10:21
  • 1
    Не применяй к имени mysql_escape_string и ещё раз: возьми отладку, посмотри что у тебя происходит, какие переменные какие значения применяют и какая итоговая сторка запроса у тебя получается. – Алексей Шиманский Sep 16 '22 at 11:46