Здравствуйте, подскажите если знаете. Запрос обрабатывается, но есть ошибка

$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 шт):

Автор решения: Алексей Шиманский

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

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

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

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

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

→ Ссылка