Здравствуйте, подскажите если знаете. Запрос обрабатывается, но есть ошибка
$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 инъекций