2016-03-12 6 views
1

Я пытаюсь обновить строку. Но он автоматически создает ошибку, потому что данные в столбце содержат это Shaquille O'neal Или есть проблемы? Вот мой код[SQL Server] Неверный синтаксис рядом с 'neal'

<?php 
if(isset($_POST['editSubmit'])){ 
    $buildingID  = $_POST['editBuilding']; 
    $buildingName  = $_POST['editBuildingName']; 
    $buildingProject = $_POST['editBuildingProject']; 
    $buildingFloors = $_POST['editBuildingFloors']; 
    $q = "update tblBuilding SET buildingName= '$buildingName' building_projectID='$buildingProject' 
      floorNumber = '$buildingFloors'   
      where buildingID = '$buildingID'"; 
    $query = $db-> prepare($q); 
    $results = $query->execute(); 
    echo" <meta http-equiv='refresh' content='0;url=project.php'>"; 
} 
?> 

Редакцией: Подготовил:

<?php 
if(isset($_POST['editSubmit'])){ 
    $buildingID  = $_POST['editBuilding']; 
    $buildingName  = $_POST['editBuildingName']; 
    $buildingProject = $_POST['editBuildingProject']; 
    $buildingFloors = $_POST['editBuildingFloors']; 

$stmt = $db->prepare("update tblBuilding set buildingName=?, building_projectID=?,floorNumber=? where buildingID = $buildingID"); 

$stmt->bindParam(1, $buildingName); 
$stmt->bindParam(2, $buildingProject); 
$stmt->bindParam(3, $buildingFloors); 
$stmt->execute(); 



    echo" <meta http-equiv='refresh' content='0;url=project.php'>"; 
} 
?> 
+1

Вам нужна запятая между столбцами, используемыми для 'set'. –

+0

Ничего не изменил: C – Jerlon

ответ

1

Реальная проблема заключается в том, что вы объединяете входные данные в SQL. Это не-go: он открывает дверь для проблем SQL-инъекций.

Используйте параметризованные запросы, и ваши проблемы должны исчезнуть.

+0

Не могли бы вы привести пример запроса параметризованного обновления? – Jerlon

+1

Взгляните на документы PHP: https://secure.php.net/manual/en/pdo.prepared-statements.php – Lucero

+0

'Неверный синтаксис рядом '('.' Пожалуйста, взгляните на мое подготовленное заявление. в главном сообщении. – Jerlon

-1

вопрос является апостроф у вас есть в ваших данных. Если у вас есть такие данные, вам нужно заменить весь апостроф на двойной апостроф. некоторые твое, как показано ниже

value = replace(value, "'", "''") 

затем передавать эти данные на ваше значение

+2

№ Пожалуйста, не предлагайте что-то подобное. Решение состоит в том, чтобы использовать встроенные функции, чтобы избежать ваших данных, по крайней мере; или использовать подготовленный оператор и связанные переменные. – andrewsi

+0

@andrewsi, какова встроенная функция для этого (в php или sql)? – FLICKER

+1

Это зависит от того, как он обращается к базе данных - каждая библиотека обрабатывает ее по-разному. http://php.net/manual/en/mysqli.real-escape-string.php - один; PDO имеет http://php.net/manual/en/pdo.quote.php, но, откровенно говоря, готовые заявления - это путь. – andrewsi

0

поле я предлагаю вам может распечатать запрос. Скорее всего, это потому, что вы обертываете значение $buildingName, используя одиночную кавычку, которая в паре с номером в Shaquille O'neal затем вызывает остальную синтаксическую ошибку запроса.